@0@6000000@5
}0&0&0&0&0
>0@6&3
\\--\/&2
@0/\@4\/&1!!
@4@1..@2@5@3
IIIIIIIIIIII
FF&1FF&2FF&3
@1OO@2OO@3OO
:I
}1..}10001F7
=9&1++..&1&0
&0}0&1&0{1{1
{>\/{0//
:O
}0
+Z
+C
{0
यह केवल 256 से कम मूल्यों के लिए काम करता है क्योंकि मारबेलस एक 8 बिट भाषा है।
यह काम किस प्रकार करता है
Marbelous एक 2 डी भाषा है जिसमें 8 बिट मार्बल्स द्वारा दर्शाए गए मान हैं जो प्रत्येक टिक पर एक सेल नीचे गिरते हैं जब तक कि कोई डिवाइस उन्हें गिरने से रोकता नहीं है। इस मारबेलस कार्यक्रम में 3 बोर्ड होते हैं; चलो सबसे आसान के साथ शुरू करते हैं:
:O
}0
+Z
+C
{0
:Oबोर्ड का नाम है (सटीक होने के लिए, ओ नाम है और: व्याख्या की गई है कि यह रेखा एक नाम है। बोर्डों को एक नाम देकर, अन्य बोर्ड उन पर कॉल कर सकते हैं
}0एक इनपुट डिवाइस है, इसे एक इनपुट के रूप में देखा जा सकता है। इस फ़ंक्शन का तर्क। इस सेल को इनपुट मार्बल (मान) द्वारा प्रतिस्थापित किया जाएगा जब फ़ंक्शन को कॉल किया जाता है।
+Zकिसी भी संगमरमर से 35 जोड़ता है जो उस पर से गुजरता है और इसे गिरने देता है। +Cवही करता है लेकिन केवल 12 जोड़ता है।{0 एक आउटपुट सेल है। , जब एक संगमरमर इस सेल तक पहुंचता है, तो फ़ंक्शन इस आउटपुट डिवाइस में मूल्य से बाहर निकल जाएगा और वापस आ जाएगा।
इसलिए सभी एक साथ, यह बोर्ड एक मूल्य लेता है और फिर इसमें 47 जोड़ देता है। हमारे लिए इसका अर्थ यह है कि यह किसी भी एक अंक की संख्या को अंक -1 के आस्की कोड में बदल देता है (यह निश्चित रूप से 10 के लिए भी काम करेगा)।
:I
}1 .. }1 00 01 F7
=9 &1 ++ .. &1 &0
&0 }0 &1 &0 {1 {1
{> \/ {0 //
यह बोर्ड कुछ अधिक जटिल लग रहा है। आपको :Iबोर्ड के नाम के रूप में पहचान करने में सक्षम होना चाहिए और कुछ इनपुट और आउटपुट डिवाइस को देखा जाना चाहिए । आप देखेंगे कि हमारे पास दो अलग-अलग इनपुट डिवाइस हैं, }0और }1। इसका मतलब है कि यह फ़ंक्शन 2 इनपुट लेता है। आप यह भी देखेंगे कि }1डिवाइस के दो उदाहरण हैं । फ़ंक्शन को कॉल करने पर, इन दोनों कोशिकाओं में समान मूल्य होगा। }0इनपुट डिवाइस एक सीधे ऊपर है\/ यह एक ट्रैशकैन रूप में कार्य करता है और किसी भी संगमरमर कि तुरंत इस पर गिर जाता है निकालता है, डिवाइस।
आइए एक नजर डालते हैं कि }1इनपुट डिवाइस द्वारा बोर्ड में लगाए गए मार्बल्स में से एक क्या होता है:
}1
=9 &1
&0
{>
यह पहली टिक पर नीचे गिर जाएगा और =9डिवाइस को हिट करेगा । यह संगमरमर के मान को 9 से तुलना करता है और यदि कथन =9के माध्यम से मूल्यांकन करता है तो संगमरमर को गिरने देता है । संगमरमर सही नहीं होने पर धकेल दिया जाता है। &0और &1सिंक्रनाइज़र हैं। वे तब तक मार्बल धारण करते हैं, जब तक कि अन्य सभी &nसिंक्रोनाइजरों को भर नहीं दिया जाता। जैसा कि आप उम्मीद कर सकते हैं, यह बोर्ड के कुछ अन्य भाग पर सशर्त रूप से विभिन्न व्यवहार को ट्रिगर करेगा।
}1 00 01 F7
++ .. &1 &0
&1 &0 {1 {1
{0 //
यदि मैं आपको बताता हूं कि ++एक वेतन वृद्धि है, तो आपको पहले से ही यह बताने में सक्षम होना चाहिए कि विभिन्न सिंक्रोनाइजरों से क्या भरा जाएगा। बाईं ओर &1इनपुट मान }1+ 1 होगा, इसके &0बगल में 0 होगा ( 00एक भाषा शाब्दिक है, जिसे हेक्साडेसिमल में दर्शाया गया है)। दूसरे &1में मान 1 होगा और दाएं &0से भरा हुआ है F7, जो कि मान से 9 घटाता है क्योंकि मारबेलस में जोड़ मोडुलो 256 है।
// एक डिफ्लेक्टर डिवाइस है, जो किसी भी संगमरमर को नीचे गिरने देने के बजाय बाईं ओर धकेलता है।
यह सब एक साथ रखना आपको यह देता है: यदि संगमरमर }19 में है, तो &0सिंक्रोनाइज़र भर जाते हैं। यह मान 0 को {0आउटपुट में और F7(या -9) आउटपुट में गिरने का कारण होगा {1। यदि }19 नहीं है, {0तो }1+ 1 से भरा {0जाएगा और इसमें 1 होगा। इसमें एक {>डिवाइस भी है, यह एक विशेष आउटपुट है जो एक बोर्ड के बगल में संगमरमर के नीचे आउटपुट करता है। इससे भरा जाएगा }1अगर यह 9 के बराबर है।
@0 @6 00 00 00 @5
}0 &0 &0 &0 &0
>0 @6 &3
\\ -- \/ &2
@0 /\ @4 \/ &1 !!
@4 @1 .. @2 @5 @3
II II II II II II
FF &1 FF &2 FF &3
@1 OO @2 OO @3 OO
ठीक है, अब बड़े के लिए। इस बोर्ड में एक स्पष्ट नाम नहीं है, क्योंकि यह फाइल का मुख्य बोर्ड है। इसके अंतर्निहित नाम है Mb। आपको कुछ कोशिकाओं को पहचानने में सक्षम होना चाहिए। एक इनपुट डिवाइस है, कुछ भाषा के शाब्दिक ( 00और FF)। कुछ सिंक्रोनाइज़र हैं और एक डिफ्लेक्टर है। टुकड़ा द्वारा इस टुकड़े के माध्यम से कदम देता है।
@0 @6
}0 &0
>0 @6
\\ --
@0 /\ @4
तो इनपुट वैल्यू (कमांड लाइन इनपुट चूंकि यह मुख्य बोर्ड है) शीर्ष पर दूसरी सेल से शुरू होता है जहां }0स्थित है। यह नीचे गिर जाएगा और >0डिवाइस तक पहुंच जाएगा , जो एक और तुलना उपकरण है। किसी भी संगमरमर से बड़ा 0 गिरता है, किसी भी अन्य संगमरमर को दाईं ओर धकेल दिया जाता है। (चूँकि Marbelous वैरिएबल अहस्ताक्षरित हैं, केवल 0 ठीक दाईं ओर धकेला जाएगा)। यह शून्य मान संगमरमर तब @6डिवाइस को हिट करेगा । यह एक पोर्टल है और मार्बल को किसी अन्य संबंधित पोर्टल पर भेजता है, इस मामले में यह ठीक ऊपर है। इसके बाद मार्बल &0सिंक्रोनाइजर तक पहुंच जाएगा और कुछ चीजों को कहीं और ट्रिगर कर देगा।
यदि संगमरमर 0 नहीं है, तो यह नीचे गिर जाता है, \\हिट द्वारा दाईं ओर विक्षेपित हो जाता है --जो इसे /\एक से घटाता है और फिर एक क्लोनर पर गिर जाता है । यह डिवाइस एक संगमरमर लेता है और इसकी एक प्रति दाईं ओर और एक बाईं ओर आउटपुट करता है। बायाँ ऊपर की ओर दूसरे स्थान पर ले जाया जाएगा @0जहाँ संगमरमर फिर उसी क्रम से जाएगा। लेफ्ट वाले को कहीं और ले जाया जाएगा। यह हमें एक लूप देता है, जो लूप के अनुसार एक बार कमांड लाइन इनपुट को घटाता है और प्रत्येक लूप पर कुछ व्यवहार को ट्रिगर करता है जब तक कि यह 0. तक नहीं पहुंच जाता है। तब यह कुछ अन्य व्यवहार को ट्रिगर करता है।
आइए एक नज़र डालते हैं कि @4प्रत्येक लूप पर धकेल दिए गए संगमरमर के साथ क्या होता है ।
@4 @1 .. @2 @5 @3
II II II II II II
FF &1 FF &2 FF &3
@1 OO @2 OO @3 OO
यहां 3 भाषा के शाब्दिक हैं ( FF), जो तुरंत पोर्टल्स में गिर जाएंगे। ये पोर्टल उन्हें तीन IIउपकरणों तक ले जाएगा । IIबोर्ड को संदर्भित करता है जिसे :Iहमने फ़ाइल के नीचे परिभाषित किया है। चूंकि :I2 अलग-अलग इनपुट डिवाइस हैं, इसलिए यह दूसरे बोर्ड पर प्रतिनिधित्व करता है 2 सेल वाइड होना चाहिए। चूंकि हमारे पास 6 कोशिकाएं हैं II, इसलिए हम बताते हैं कि हमारे पास बोर्ड पर इस फ़ंक्शन के 3 उदाहरण हैं।
FF(या 256 या -1 आप होगा अगर) पत्थर के इनपुट कोशिकाओं में बैठेंगे :I(एक और है कि) तक देखते हैं पर्याप्त इनपुट संगमरमर STO समारोह शुरू इंतजार कर कार्य करते हैं। यही वह जगह है जहाँ @4पोर्टल आता है। प्रत्येक लूप पर डिक्रिप्टेड कमांड लाइन इनपुट की एक कॉपी वहां से गुजरती है। यह सबसे बाएं :Iबोर्ड को ट्रिगर करेगा । मान 256 (या -1) और जो कुछ भी कमांड लाइन इनपुट -1 के साथ शुरू हुआ था। बाएं संगमरमर को बोर्ड के }0उपकरणों में :Iऔर दाईं ओर एक को रखा जाएगा }1। यदि आपको याद है कि इस बोर्ड ने क्या किया है, तो आप यह बता पाएंगे कि इसका क्या परिणाम है। यह बाएं आउटपुट पर दाएं इनपुट के एक बढ़े हुए संस्करण का उत्पादन करेगा (और यह 9 को 0 में बदल देता है, 10 का नहीं) और दाईं ओर 1 या -9 आउटपुट करता है।
बढ़े हुए मूल्य को एक पोर्टल द्वारा सही इनपुट सेल में वापस ले लिया जाएगा, और दाईं ओर का मूल्य एक सिंक्रोनाइज़र में गिर जाता है। यदि एक सिंक्रोनाइज़र पहले से ही एक संगमरमर पकड़ रहा है, तो दो पत्थर टकराएंगे। कोलाइडिंग मार्बल एक साथ मोडुलो 256 में जुड़ जाते हैं। इसलिए सिंक्रोनाइजर्स में वैल्यू फोलोइंग करेंगे: वे खाली होने लगते हैं, फिर 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 और फिर मुड़ते हैं। 1 फिर (247 के बाद से जोड़ा जाता है modulo 256)।
आप यह भी याद रख सकते हैं कि एक संगमरमर दाएं से आउटपुट प्राप्त करता है जब इनपुट मान वापस 0 पर आ जाता है। चूंकि :Iबोर्ड एक दूसरे के ठीक बगल में होते हैं, इसलिए thsi बोर्ड को एक बार दाईं ओर ट्रिगर करेगा। यह तीन सिंक्रोनाइज़र को उन मानों से भर देगा जो एक से अधिक हैं, उन्हें कमांड लाइन इनपुट का एक शार्प प्रतिनिधित्व होना चाहिए, जब तक कि यह 0 से कम हो गया हो।
आप यह भी याद रख सकते हैं कि :Oफ़ंक्शन एक मान को उस अंक के एएससीआई मान में बदल देता है जो मान -1 का प्रतिनिधित्व करता है। इन OOकोशिकाओं का उत्पादन तब बोर्ड से गिर जाएगा, जो एसटीडी के लिए अपने संबंधित एससीआई चार्ट को प्रिंट करता है।
00 00 00 @5
&0 &0 &0
&3
\/ &2
\/ &1 !!
@5
तो क्या होता है जब कमांड लाइन इनपुट मार्बल 0 तक पहुँच जाता है और उस &0सिंक्रोनाइज़र को भरता है ? ठीक है, कुछ 0 मूल्य के पत्थर नीचे गिरते हैं और तीन सिंक्रोनाइज़र को ट्रिगर करते हैं जो बोर्ड के निचले भाग में शोर्टेक्स संख्या के अंकों (+ 1) को पकड़ते हैं। &3पहले ट्रिगर हो जाता है, क्योंकि इसमें सबसे महत्वपूर्ण अंक होता है, उसके बाद आता &2है &1। यह मार्बल @5अंततः !!सेल से टकराने से पहले दूसरे डिवाइस को टेलीपोर्ट हो जाता है , जो बोर्ड को समाप्त कर देता है।
19, 20, 21, 22में दशमलव के नक्शे08, 09, 10, 11में अनुक्रम। इसलिए मैंने उस उलझन को इस्तेमाल किया100 -> 89!