}0
--@2
@2/\=0MB
}0@1\/
&0/\>0!!
--
@1
00@0
--/\=0
\\@0&0
Marbelous एक 8 बिट भाषा है जिसमें केवल Rube Goldberg-like मशीन में मार्बल्स द्वारा दर्शाए गए मान हैं, इसलिए यह बहुत आसान नहीं था। यह दृष्टिकोण लगभग निम्नलिखित छद्म कोड के बराबर है:
function recursiveFunction(int i)
{
for(int j = i*512; j > 0; j--)
{
recursiveFunction(i - 1);
}
}
चूँकि अधिकतम मान 256 है, (मार्बलस प्रोग्राम में 0 से दर्शाया जाता है, जिसे अलग-अलग जगहों पर अलग-अलग तरीके से हैंडल किया जाता है) रिकर्सिवफंक्शन (1) को कुल मिलाकर कहा जाएगा, 256!*512^256
जो 10^1200
ब्रह्मांड को रेखांकित करने के लिए आसानी से पर्याप्त है।
मारबेलस के पास बहुत तेज़ दुभाषिया नहीं है, ऐसा लगता है कि यह 10^11
प्रति वर्ष इस फ़ंक्शन के कॉल के बारे में चल सकता है, जिसका अर्थ है कि हम 10^1189
वर्षों के रनटाइम को देख रहे हैं ।
मारबेलस बोर्ड की आगे की व्याख्या
00@0
--/\=0
\\@0&0
00
एक भाषा शाब्दिक (या एक संगमरमर) है, जो हेक्साडेसिमल (इसलिए 0) में दर्शाया गया है। यह संगमरमर नीचे गिरता है --
, जो किसी भी संगमरमर को 1 से घटाता है (00 लपेटता है और FF या 255 में दशमलव में बदल जाता है)। अब जिस FF के साथ मार्बल नीचे आता है, \\
वह एक कॉलम को दाईं ओर, निचले हिस्से में बंद कर देता है @0
। यह एक पोर्टल है और मार्बल को दूसरे @0
उपकरण तक पहुंचाता है। वहां, /\
डिवाइस पर संगमरमर की भूमि , जो एक अनुलिपित्र है, यह संगमरमर की एक प्रति --
अपने बाईं ओर रखती है (यह संगमरमर पोर्टल्स के बीच लूपिंग रखेगा और हर लूप पर अपघटित हो जाएगा) और एक संगमरमर की तुलना करता है। मान शून्य और अगर यह बराबर है और यह सही नहीं करने के लिए धक्का अगर गढ़ संगमरमर गिर जाता है। यदि संगमरमर का मान 0 है, तो यह भूमि पर है=0
इसके दाईं ओर।=0
&0
, एक सिंक्रोनाइज़र, जिसे मैं आगे समझाऊंगा, बाद में।
सब सब में, यह सिर्फ एक लूप में 0 मान संगमरमर के साथ शुरू होता है और इसे तब तक घटाता है जब तक कि यह फिर से 0 तक नहीं पहुंचता है, फिर यह इस 0 मूल्य के संगमरमर को एक सिंक्रोनाइज़र में डालता है और एक ही समय में लूपिंग करता है।
}0@1
&0/\>0!!
--
@1
}0
एक इनपुट डिवाइस है, प्रारंभ में nth (बेस 0) कमांड लाइन इनपुट है जब प्रोग्राम को कॉल करना प्रत्येक }n
डिवाइस में रखा जाता है। इसलिए यदि आप इस प्रोग्राम को कमांड लाइन इनपुट 2 के साथ कहते हैं, तो 02 मूल्य का संगमरमर इसे बदल देगा }0
। यह संगमरमर तब &0
डिवाइस में गिर जाता है, एक और सिंक्रोनाइजर, &n
सिंक्रोनाइजर्स तब तक मार्बल पकड़ते हैं , जब तक कि अन्य सभी संगत &n
फाइल नहीं हो जाती। मार्बल तब पहले से बताए गए लूप की तरह बहुत कम हो जाता है, टेलीपोर्ट और डुप्लिकेट हो जाता है। सही प्रति फिर शून्य के साथ असमानता के लिए जाँच की जाती है ( >0
) यदि यह 0 नहीं है, तो यह गिर जाता है। यदि यह 0 है, तो इसे दाईं ओर और जमीन पर धकेल दिया जाता है !!
, जो बोर्ड को समाप्त कर देता है।
ठीक है, अब तक हमारे पास एक लूप है जो लगातार 255 से 0 से नीचे गिना जाता है और एक और, समान लूप (कमांड लाइन इनपुट द्वारा खिलाया गया) हर बार हिट होने पर चलता है 0. जब यह दूसरा लूप n बार चला गया हो (अधिकतम 256 ) कार्यक्रम समाप्त हो गया। इसलिए यह लूप का अधिकतम 65536 रन है। ब्रह्मांड को रेखांकित करने के लिए लगभग पर्याप्त नहीं है।
}0
--@2
@2/\=0MB
यह परिचित दिखना शुरू कर देना चाहिए, इनपुट एक बार डिक्रिप्ट हो जाता है, फिर यह मान घूम जाता है और कॉपी हो जाता है (ध्यान दें कि संगमरमर केवल एक बार डिक्रिप्ट हो जाता है, लूप के प्रत्येक रन पर नहीं)। यह तब 0 के लिए समानता के लिए जाँच की जाती है और यदि यह शून्य भूमि पर नहीं है MB
। यह मारबेलस में एक फ़ंक्शन है, प्रत्येक फ़ाइल में कई बोर्ड हो सकते हैं और प्रत्येक बोर्ड एक फ़ंक्शन है, प्रत्येक फ़ंक्शन को ग्रिड द्वारा पूर्ववर्ती नाम दिया जाना है :[name]
। फ़ाइल में पहले फ़ंक्शन को छोड़कर प्रत्येक फ़ंक्शन, जिसमें एक मानक नाम है: एमबी। तो यह लूप लगातार मुख्य बोर्ड को फिर से उस मूल्य के साथ कहता है n - 1
जहां n तेह मान है जिसके साथ इस फ़ंक्शन का उदाहरण कहा जाता है।
तो क्यों n*512
?
अच्छा, पहला लूप 4 टिक्स (और 256 बार) में चलता है और दूसरा लूप बोर्ड समाप्त होने से पहले n बार चलता है। इसका मतलब है कि बोर्ड लगभग n*4*256
टिक्स के लिए चलता है । अंतिम लूप (जो पुनरावर्ती फ़ंक्शन कॉलिंग करता है) बैक्टीरिया है और 2 टिक्स में चलता है, जिसका अर्थ है कि यह फ़ंक्शन n*4*256/2 = n*512
बार कॉल करने का प्रबंधन करता है।
आपने जिन प्रतीकों का उल्लेख नहीं किया है, वे क्या हैं?
\/
एक कचरा बिन है, जो बोर्ड से मार्बल्स को हटाता है, यह सुनिश्चित करता है कि डिस्कनेक्ट किए गए मार्बल्स अन्य मार्बल्स के साथ हस्तक्षेप नहीं करते हैं जो एक राउंड लूप कर रहे हैं और प्रोग्राम को समाप्त होने से रोकते हैं।
बोनस
चूँकि मार्बल बोर्ड के निचले भाग से नीचे गिरते हैं, इसलिए STDOUT को आउटपुट मिलता है, यह प्रोग्राम ASCII वर्णों के ढेर को प्रिंट करता है जबकि यह चलता है।