99 ("निन्यानबे" उच्चारण) एक नई Esoteric प्रोग्रामिंग भाषा है ( 99 के साथ भ्रमित नहीं होना चाहिए , इटैलिक पर ध्यान दें)। इस चुनौती में आपका काम 99 के लिए एक दुभाषिया लिखना है जो जितना संभव हो उतना कम हो। सबसे कम बाइट्स के साथ सबमिशन जीत जाता है। टाईब्रेकर पहले पोस्ट किए गए सबमिशन में जाता है।
चूँकि यह प्रश्न सामान्य से कुछ अधिक गहरा है, और मैं अच्छे उत्तर देखने के लिए उत्सुक हूं, मैं अपने पसंदीदा उत्तर (जरूरी नहीं कि विजेता) को 250 प्रतिनिधि इनाम दूं।
99 कल्पना
99 एक अनिवार्य भाषा है। 99 प्रोग्राम में प्रत्येक पंक्ति एक एकल स्टेटमेंट है , और निष्पादन के दौरान, निर्देश सूचक शीर्ष रेखा पर शुरू होता है और क्रम में बाद की प्रत्येक लाइनों से गुजरता है, उन्हें रास्ते में निष्पादित करता है। अंतिम पंक्ति निष्पादित होने पर कार्यक्रम समाप्त हो जाता है। गोटो के बयान निर्देश सूचक के मार्ग को पुन: उत्पन्न कर सकते हैं।
Newline, space, और 9
केवल तीन अक्षर हैं जो 99 प्रोग्राम में मायने रखते हैं । अन्य सभी पात्रों को पूरी तरह से नजरअंदाज कर दिया जाता है। इसके अतिरिक्त, प्रत्येक पंक्ति पर अनुगामी रिक्त स्थान को अनदेखा किया जाता है, और एक पंक्ति में कई स्थानों को एक स्थान के रूप में पढ़ा जाता है। ("न्यूलाइन" किसी भी सामान्य लाइन ब्रेक एन्कोडिंग को संदर्भित करता है । यह कोई फर्क नहीं पड़ता कि आपका इंटरप्रिटर कौन उपयोग करता है।)
तो यह कार्यक्रम:
9 BLAH 99 9a9bb9c9
9 this line and the next have 6 trailing spaces 9
इस कार्यक्रम के समान है:
9 99 9999
9 9
चर
99 में चर सभी के नाम हैं जो एक या एक से अधिक 9
के साथ मिलकर ( 9+
रेगेक्स में) हैं। उदाहरण के लिए, 9
, 99
, और 9999999999
सभी अलग चर हैं। स्वाभाविक रूप से, असीम रूप से कई (स्मृति सीमाओं को छोड़कर) हैं।
प्रत्येक चर का मान एक हस्ताक्षरित, मनमाना सटीक पूर्णांक है। डिफ़ॉल्ट रूप से, प्रत्येक चर को अपने स्वयं के संख्यात्मक प्रतिनिधित्व को सौंपा जाता है। इसलिए जब तक यह पुन: असाइन नहीं किया गया है, चर 9
का मान 9 नंबर है, और चर 99
का मान 99 नंबर है, और इसी तरह। जब तक वे स्पष्ट रूप से निर्दिष्ट नहीं हो जाते, तब तक आप चर को सादे संख्या के रूप में मान सकते हैं।
मैं नीचे V
एक मनमाना चर नाम का उल्लेख करने के लिए उपयोग करूंगा ।
के प्रत्येक उदाहरण के V
साथ प्रतिस्थापित किया जा सकता है 9
, 99
, 999
, 9999
, आदि
बयान
99 में पांच अलग-अलग स्टेटमेंट टाइप हैं । 99 प्रोग्राम की प्रत्येक पंक्ति में ठीक एक कथन होता है।
यहाँ वर्णित वाक्यविन्यास मानता है कि सभी बाहरी वर्ण हटा दिए गए हैं, सभी अनुगामी रिक्त स्थान हटा दिए गए हैं, और कई स्थानों के सभी दृश्यों को एकल रिक्त स्थान से बदल दिया गया है।
1. कोई ऑपरेशन नहीं
एक खाली लाइन एक नो-ऑप है । यह कुछ नहीं करता है (अनुदेश सूचक को बढ़ाने के अलावा)।
2. आउटपुट
V
एक V
लाइन पर एक वैरिएबल स्टैडआउट करने के लिए वैरिएबल प्रिंट करता है।
यदि V
विषम संख्या में 9
( 9
,, 999
आदि) है, तो V
9 से विभाजित के पूर्णांक मान को मुद्रित किया जाएगा (दशमलव में)।
यदि V
सम संख्या 9
( 99
, 9999
इत्यादि) है, तो कोड के साथ ASCII वर्ण V
9, mod 128 से विभाजित होगा। (यह (V / 9) % 128
मान 0 से 127 तक है।)
उदाहरण : कार्यक्रम
9
9999
छपता था 1W
। पहली पंक्ति प्रिंट करती है 1
क्योंकि 9/9 है 1. दूसरी लाइन प्रिंट W
क्योंकि 9999/9 1111 है, और 1111 मॉड 128 87 है, और 87 के लिए वर्ण कोड है W
।
ध्यान दें कि लाइन ब्रेक आउटपुट टोकन के बीच मुद्रित नहीं होते हैं। \n
लाइन ब्रेक के लिए स्पष्ट रूप से मुद्रित करने की आवश्यकता है।
3. इनपुट
V
एक अग्रणी स्थान के साथV
एक लाइन पर एक एकल चर स्टड से इनपुट लेता है और उस चर में संग्रहीत करता है।
यदि V
विषम संख्या है, 9
तो उपयोगकर्ता किसी भी हस्ताक्षरित पूर्णांक में टाइप कर सकता है, और V
उस मान के 9 गुना पर सेट किया जाएगा।
यदि V
सम संख्या है 9
तो उपयोगकर्ता किसी भी ASCII वर्ण में टाइप कर सकता है, और V
इसके वर्ण कोड के 9 गुना पर सेट किया जाएगा।
उदाहरण : दिया -57
और A
इनपुट के रूप में, यह कार्यक्रम
9
9
99
99
उत्पादन होगा -57A
। आंतरिक रूप से, चर 9
का मान -513 99
होगा , और इसका मान 585 होगा।
आपका दुभाषिया यह मान सकता है कि इनपुट हमेशा वाक्यात्मक रूप से मान्य होते हैं।
4. असाइनमेंट
यह कथन मनमाने ढंग से लंबा हो सकता है। यह एक लाइन पर दो या अधिक चर हैं, जो रिक्त स्थान द्वारा अलग किए गए हैं:
V1 V2 V3 V4 V5 ...
यह सभी सूचकांकों के सम योगों को दर्शाता है, विषम सूचकांकों (छोड़कर ) के साथ ऋण का योग है । मान संदर्भ द्वारा नहीं, मान से होते हैं।V1
V
V
V1
अधिकांश भाषाओं में इसका अनुवाद किया जा सकता है ।V1 = V2 - V3 + V4 - V5 + ...
इसलिए, यदि केवल दो चर हैं, तो यह सामान्य कार्य है:
V1 V2
→ V1 = V2
यदि तीन हैं, तो यह घटाव है:
V1 V2 V3
→ V1 = V2 - V3
और +
/ -
चिह्न प्रत्येक अतिरिक्त चर के साथ आगे और पीछे स्विच करता रहता है:
V1 V2 V3 V4
→ V1 = V2 - V3 + V4
उदाहरण : यह कार्यक्रम आउटपुट होगा 1110123
:
999 Prints triple-nine divided by nine (111).
999 9 9 Assigns triple-nine to zero (nine minus nine).
999 Prints triple-nine divided by nine (0)
9 999 9 Assigns single-nine to negative nine (zero minus nine).
999 999 9 Adds nine to triple-nine (really subtracts negative nine).
999 Prints triple-nine divided by nine (1).
999 999 9 Adds nine to triple-nine (really subtracts negative nine).
999 Prints triple-nine divided by nine (2).
999 999 9 Adds nine to triple-nine (really subtracts negative nine).
999 Prints triple-nine divided by nine (3).
5. गोटो (यदि सभी शून्य कूदें)
यह कथन मनमाने ढंग से लंबा भी हो सकता है। यह एक पंक्ति पर दो या अधिक चर है, जो अंतरिक्ष द्वारा अलग किए जाते हैं, एक अग्रणी स्थान के साथ :
V1 V2 V3 V4 V5 ...
यदि इसके अलावा कुछ मान गैर-शून्य हैं, तो यह एक नो-ऑप की तरह व्यवहार करता है। निर्देश पॉइंटर को हमेशा की तरह अगली पंक्ति में ले जाया जाता है।V1
यदि सभी मूल्यों के अलावा हैं शून्य है, तो अनुदेश सूचक संख्या लाइन ले जाया जाता है । लाइनें शून्य-अनुक्रमित हैं, इसलिए यदि शून्य है, तो सूचक शीर्ष रेखा पर जाता है। कार्यक्रम समाप्त हो जाता है (आमतौर पर, त्रुटि के बिना) यदि नकारात्मक है या उच्चतम संभव सूचकांक (लाइनों की संख्या शून्य से एक) से बड़ा है।V1
V1
V1
V1
ध्यान दें कि यहां 9 से विभाजित नहीं किया गया था। और चूंकि एक चर का होना असंभव है, इसलिए यह 9 का गुणक नहीं है, केवल 9 के गुणक वाले लाइन नंबर को जंप किया जा सकता है।V1
उदाहरण:
यह कार्यक्रम 1
हमेशा के लिए छपेगा:
9 Prints single-nine divided by nine (always 1).
99 9 9 Assigns double-nine to zero.
99 99 Jumps to line zero (top line) if double-nine is zero.
यह कार्यक्रम
99999999 Print G.
999 99 Set triple-nine to ninety-nine.
9999999999 9999999999 9999999999 99 99 9 9 999 999 Set 10-nine to zero.
99999999999 9999999999 Set 11-nine to zero.
999 Print triple-nine's value divided by nine. (This is the ninth line.)
99999999 Print G.
999 999 9 Subtract nine from triple-nine.
99999 999 Jump to line 5-nines if triple-nine is zero (ends program).
9 99999999999 9999999999 Jump to line nine if 10-nine and 11-nine are zero (always jumps).
घटते क्रम में 11 से 1 की संख्या में उत्पादन करेगा, जो कि घिरा हुआ है G
:
G11G10G9G8G7G6G5G4G3G2G1G
अतिरिक्त जानकारिया
आदर्श दुभाषिया एक तर्क के रूप में 99 प्रोग्राम फ़ाइल नाम के साथ कमांड लाइन से चलेगा । I / O कमांड लाइन में फ्लाई पर भी किया जाएगा।
हालाँकि, आप बस एक दुभाषिया फ़ंक्शन लिख सकते हैं जो प्रोग्राम में स्ट्रिंग के साथ-साथ इनपुट टोकन (जैसे ["-57", "A"]
) की एक सूची के रूप में लेता है । फ़ंक्शन को आउटपुट स्ट्रिंग को प्रिंट या वापस करना चाहिए।
दुभाषिया चलाने और I / O को संभालने के कुछ अलग तरीके ठीक हैं यदि ये विकल्प आपकी भाषा में असंभव हैं।
बोनस: 99 में कुछ अच्छा लिखें और मैं इसे एक उदाहरण के रूप में ख़ुशी से इस पोस्ट में डालूँगा।
- यहाँ मैक के जवाब से एक साफ "99 बोतल बीयर की" एक पास्टबिन है ।
आशा है कि आपको मेरी 99 वीं चुनौती पसंद आई होगी! : डी