इस चुनौती में, आप एक के लिए दुभाषिया लिखेंगे 2 Ω (के रूप में लिखित TwoMega ), शिथिल के आधार पर एक भाषा brainfuck एक अनंत आयामी भंडारण स्थान के साथ।
भाषा
2 Ω राज्य के तीन टुकड़े शामिल हैं:
टेप , जो बिट्स की एक अनंत सूची है, सभी यह 0 पर प्रारंभ एक वाम-पंथी तत्व है, लेकिन कोई सबसे दायीं ओर का तत्व है।
मेमोरी सूचक है, जो ग़ैर-ऋणात्मक पूर्णांक टेप में एक तत्व के एक सूचकांक है। एक उच्च मेमोरी पॉइंटर आगे दाईं ओर एक टेप सेल को संदर्भित करता है; 0 का एक मेमोरी पॉइंटर सबसे बाएं तत्व को संदर्भित करता है। मेमोरी पॉइंटर को 0 से इनिशियलाइज़ किया जाता है।
अतिविम है, जो एक धारणात्मक है ∞ आयामी कोशिकाओं के "बॉक्स", जिनमें से प्रत्येक एक सा 0 पर प्रारंभ होता है अतिविम की चौड़ाई केवल 2 कोशिकाओं के लिए हर आयाम में ही है, लेकिन आयामों की अनन्तता की संख्या का मतलब कोशिकाएं बेशुमार हैं ।
हाइपरक्यूब में एक सूचकांक बिट्स की एक अनंत सूची है जो हाइपरक्यूब में एक सेल को संदर्भित करता है (उसी तरह बिट्स की एक सीमित सूची का उपयोग परिमित आयाम के हाइपरक्यूब को संदर्भित करने के लिए किया जा सकता है)। क्योंकि टेप बिट्स की एक अनंत सूची है, पूरा टेप हमेशा हाइपरक्यूब के एक तत्व को संदर्भित करता है; इस तत्व को रेफरेंट कहा जाता है ।
2 Ω 7 विभिन्न पात्रों को अर्थ देता है:
<
मेमोरी पॉइंटर को 1. से घटाकर इसे 0 से कम करना अपरिभाषित व्यवहार है, इसलिए आपको इसे संभालने की आवश्यकता नहीं है।>
1 से मेमोरी पॉइंटर को बढ़ाता है।!
संदर्भित पर थोड़ा फ़्लिप करता है।.
संदर्भ में बिट को आउटपुट करता है।^
सेल पर बिट की जगह रेफरेंस में बिट के व्युत्क्रम के साथ टेप पर मेमोरी पॉइंटर द्वारा इंगित किया गया है ।[x]
x
जब तक संदर्भ में बिट 1 है तब तक कोड चलाता है।
चुनौती
आपका काम एक प्रोग्राम है जो इनपुट और कार्यान्वित के रूप में एक स्ट्रिंग लेता है लिखना है कि एक 2 के रूप में इनपुट Ω कार्यक्रम।
ये है कोड गोल्फ, इसलिए सबसे छोटा वैध उत्तर (बाइट्स में मापा गया) जीतता है।
टिप्पणियाँ
- आप मान सकते हैं कि कार्यक्रम में केवल वर्ण शामिल होंगे
<>!.^[]
और यह[]
ठीक से नेस्टेड होगा। - आपका दुभाषिया केवल सिस्टम पर उपलब्ध स्मृति द्वारा सीमित होना चाहिए। यह उचित समय में नमूना कार्यक्रमों को चलाने में सक्षम होना चाहिए।
नमूना कार्यक्रम
प्रिंट 1:
!.
010 प्रिंट करें:
.!.!.
प्रिंट 0 हमेशा के लिए:
![!.!]
यदि !
प्रीपेड हो तो हमेशा के लिए 0 या 1 हमेशा के लिए प्रिंट करें :
[.]![!.!]
cat
कार्यक्रम लिखने के लिए आपका निमंत्रण : इनपुट लेने के लिए एक निर्देश नहीं लगता है।
.
- एक एकल शून्य प्रिंट करता है और फिर मौजूद होता है; !^!.
- एक एकल प्रिंट करता है फिर बाहर निकलता है। हालांकि अधिक अच्छा होगा। फिलहाल उन्हें सत्यापित करने के लिए सबमिशन को समझना चाहिए (और इसलिए उन्हें आगे बढ़ाना चाहिए!)
[0,0,0,0,0,0,0...]
(यानी !
कार्यक्रम की शुरुआत में उपस्थिति ) होने से दिया जाएगा।
[.]![!.!]
उस सेल के मूल्य को हमेशा के लिए प्रिंट करने के लिए कर सकते हैं
1
टेप पर एस की संख्या हमेशा परिमित रहती है। वास्तव में, प्राकृतिक नंबरों और टेप स्टेट्स के बीच एक काफी सरल आक्षेप होता है (टेप कंटेंट को बैकवर्ड बाइनरी नंबर के रूप में व्याख्या करें), जो दर्शाता है कि हाइपरस्यूक मूल रूप से एक अनंत 1D सरणी है, जो एक पूर्णांक मूल्य में बिट्स को फ़्लिप करके एक्सेस किया जाता है। के बजाय / में / कमी के रूप में brainfuck में।