( एक पुराने प्रश्न पर इस टिप्पणी से प्रेरित होकर ।)
पृष्ठभूमि
एक त्रुटि क्वीन (जिसे "किमियन क्वीन" के रूप में भी जाना जाता है) एक ऐसा कार्यक्रम है, जो संकलित या चलाने पर, कंपाइलर / दुभाषिया / रनटाइम के कारण त्रुटि संदेश को प्रिंट करने का कारण बनता है जिसमें प्रोग्राम के समान पाठ होता है, और कुछ नहीं। इस चुनौती के प्रयोजनों के लिए, हम चेतावनी में शामिल करने के लिए, मोटे तौर पर "त्रुटि" को परिभाषित कर रहे हैं।
कार्य
इस चुनौती में, हम एक की तलाश कर रहे हैं Quineजो भी एक त्रुटि है। जब निष्पादित किया जाता है, तो प्रोग्राम को अपने स्वयं के स्रोत कोड को सामान्य रूप से प्रिंट करना चाहिए (यानी त्रुटि / चेतावनी संदेश के रूप में नहीं); यह एक उचित क्वीन होना चाहिए (अर्थात प्रोग्राम के कुछ भाग को आउटपुट के एक अलग भाग को एन्कोड करना होगा)। इसके अतिरिक्त, कार्यक्रम को संकलित और निष्पादित करना भी कार्यक्रम के स्रोत कोड का कारण होना चाहिए - और कुछ नहीं - कार्यान्वयन द्वारा त्रुटि या चेतावनी संदेशों के रूप में मुद्रित किया जाना चाहिए। (ध्यान दें कि इसका मतलब है कि आप संकलन-समय त्रुटियों का उपयोग नहीं कर पाएंगे, उन भाषाओं में जहां प्रोग्राम को सामान्य रूप से निष्पादित करने से रोकते हैं।) इसलिए दूसरे शब्दों में, प्रोग्राम का स्रोत कोड दो बार मुद्रित किया जाएगा, प्रत्येक विधि के माध्यम से एक बार।
स्पष्टीकरण
- ज्यादातर मामलों में, यह स्पष्ट होगा कि क्या है और एक त्रुटि / चेतावनी संदेश नहीं है; हम यहां दोनों के बीच अंतर नहीं कर रहे हैं। अस्पष्ट मामलों में, किसी भी पाठ के रूप में एक त्रुटि / चेतावनी संदेश को परिभाषित करें जो कि कार्यान्वयन द्वारा या तो आउटपुट है: 1. एक कमांड निष्पादित करने के अलावा किसी अन्य चीज के परिणामस्वरूप (या जो भाषा में निकटतम समतुल्य है); या 2. जो आउटपुट के रूप में इसे कमांड के इनपुट का हिस्सा नहीं था।
- क्वीन की त्रुटि / चेतावनी वाले हिस्से को एक उचित क्वीन होने की आवश्यकता नहीं है (हालांकि ज्यादातर मामलों में यह संयोग से होगा, क्योंकि अधिकांश त्रुटि और चेतावनी संदेशों में निश्चित पाठ की काफी मात्रा होती है)।
- यह कई त्रुटियों / चेतावनियों के उत्पादन के लिए कार्यक्रम के लिए स्वीकार्य है, जो एक साथ समाप्त होने पर कार्यक्रम के स्रोत का निर्माण करते हैं। यह आउटपुट त्रुटियों / चेतावनियों के लिए स्वीकार्य नहीं है जो स्रोत में प्रकट नहीं होती हैं।
- कई चुनौतियों के विपरीत, कंपाइलर को दिए गए स्विच और प्रोग्राम का नाम, इस चुनौती में अत्यधिक प्रासंगिक होने की संभावना है। यह देखते हुए कि चुनौती अन्यथा संभव नहीं हो सकती है, मैं यहाँ लचीला होने को तैयार हूँ, हालाँकि यदि आप कार्यान्वयन को असामान्य तरीके से चलाते हैं, तो याद रखें कि PPCG नियम ऐसा करने के लिए एक बाइट जुर्माना वसूलता है (अतिरिक्त वर्णों की संख्या के बराबर) आपको कमांड लाइन पर एक प्रोग्राम चलाने के लिए सबसे कम "सामान्य" तरीके से जोड़ना होगा), और इस तरह आपको अपनी पोस्ट में जुर्माना का आकार निर्दिष्ट करना होगा। (उदाहरण के लिए, यदि आप जिस दुभाषिया का उपयोग कर रहे हैं, वह प्रोग्राम को फ़ाइल से पढ़ता है, और फ़ाइल नाम पर कोई विशेष प्रतिबंध नहीं है, तो प्रोग्राम को चलाने का सबसे छोटा सामान्य तरीका 1-वर्ण फ़ाइल नाम वाली फ़ाइल से होगा; इस प्रकार;
- संकलक / दुभाषिया संस्करण जो आप उपयोग करते हैं वह अच्छी तरह से प्रासंगिक हो सकता है, इसलिए आपके प्रस्तुत करने के भाग के रूप में, कृपया एक विशिष्ट संकलक या दुभाषिया बताएं जिस पर आपका कार्यक्रम काम करता है, और किस संस्करण की आवश्यकता है। (उदाहरण के लिए, एक प्रस्तुतकर्ता हेडर में "C (gcc 6.2.0)" बता सकता है।)
- ध्यान दें कि यह कार्य सभी भाषाओं में संभव नहीं हो सकता है। उन भाषाओं में जहां यह सबसे आसान तरीका है, एक त्रुटि या चेतावनी संदेश खोजने की संभावना होगी, जिसके लिए पाठ के कुछ सबसेट को अनुकूलित करना संभव है (संदेश में उद्धृत किसी चीज़ का नाम बदलकर; फ़ाइल नाम एक आम पसंद है; यहाँ, लेकिन केवल एक ही नहीं)। मैं विशेष रूप से प्रभावित (और आश्चर्यचकित) हो जाऊंगा यदि कोई व्यक्ति केवल त्रुटि और चेतावनी संदेशों का उपयोग करके ऐसा करने का तरीका ढूंढता है जिसका पाठ तय हो गया है।
विजय की स्थिति
यह है एक कोड गोल्फचुनौती है, इसलिए एक प्रविष्टि को बेहतर माना जाता है यदि इसकी एक छोटी बाइट गिनती हो। जैसे, एक बार जब आप अपना कार्यक्रम पूरी तरह से काम कर लेते हैं, तो आप इसे बाइट की संख्या को यथासंभव नीचे लाने के लिए अनुकूलित करना चाहते हैं। (हालांकि, पहले से ही एक छोटी प्रविष्टि होने पर निराश न हों, खासकर अगर यह एक अलग भाषा में हो; जो हम वास्तव में यहां देख रहे हैं वह किसी विशेष एल्गोरिथ्म या विचार को किसी प्रोग्राम के पीछे जितना संभव हो उतना छोटा करना है, लेकिन कई को देखकर विभिन्न भाषाओं में समाधान या विभिन्न सिद्धांतों पर भरोसा करने वाला हमेशा सार्थक होता है।)