`:_64/"32}
,` (3 :=-{
"`{"; _v2$ ;`3
"`".:@ ; ".5(`3.
< "" `^`;>
@ मार्टिनबटनर के साथ एक और कोलाब और लेबिरिंथ स्पेक्ट्रम के अधिक पागल पक्ष पर - पहली बार हमारे पास ^>v<
एक कार्यक्रम में सभी चार हैं । इसे ऑनलाइन आज़माएं!
व्याख्या
सामान्य एल्गोरिथ्म, जो एक लूप में चलता है, इस प्रकार है:
1. Read a char
2. If EOF:
3. Move all digits from auxiliary stack to main
4. Output all digits on main stack
5. Halt
Otherwise:
6. If char is a letter (c >= 64):
7. If random turns left:
8. Output char XOR 32
Otherwise:
9. Output char
Otherwise:
10. Shift char to auxiliary stack
11. If char is space (c-32 == 0):
12. Pull char back from auxiliary stack
13. Output underscore
Otherwise:
14. Continue loop
स्पष्टीकरण को कॉम्पैक्ट रखने के लिए, यहाँ मोटे तौर पर बताया गया है कि कार्यक्रम का प्रत्येक भाग ऊपर के छद्म कोड से मेल खाता है:
यहाँ दिलचस्प हिस्से हैं।
भूलभुलैया में यादृच्छिकता हो रही है
भूलभुलैया में यादृच्छिकता प्राप्त करने का केवल एक ही तरीका है, और यह तब होता है जब आईपी आगे की ओर जाने की कोशिश करता है लेकिन 1) न तो आगे और न ही पीछे की ओर एक रास्ता है और 2) बाएं और दाएं रास्ते उपलब्ध हैं। इस मामले में, आईपी बाएं और दाएं मार्गों के बीच बेतरतीब ढंग से चुनता है।
यह केवल ^>v<
ऑपरेटर्स का उपयोग करना संभव है , जो 1. द्वारा n
पंक्ति / कॉलम को पॉप और शिफ्ट n
करता है। उदाहरण के लिए, प्रोग्राम ( इसे ऑनलाइन आज़माएं! )।
" 1
""v!@
2
!@
1 या 2 बेतरतीब ढंग से आउटपुट देता है, क्योंकि 1 से v
कॉलम को ऑफसेट करता है 0 (यानी कॉलम आईपी पर है) 1 से, उपज
"
""1!@
v
2!@
आईपी सही का सामना कर रहा है और आगे की ओर जाने की कोशिश करता है (स्टैक के शीर्ष शून्य है) लेकिन नहीं कर सकता। यह पीछे की ओर भी नहीं जा सकता है, इसलिए यह बेतरतीब ढंग से बाएं या दाएं के बीच चुनता है।
गोल्फ की चाल
कार्यक्रम पढ़ने के क्रम में पहले चार से शुरू होता है, जिसे आप नोटिस करेंगे वास्तव में चरण 6 है। हालांकि, एक खाली भूलभुलैया स्ट्रीप से 0 की पॉपिंग होती है, इसलिए चरण 10 और 14 होते हैं, एक शून्य को सहायक स्टैक में स्थानांतरित करते हैं, जो प्रभावी रूप से होता है। एक सेशन नहीं।
मुख्य स्टैक हर पुनरावृत्ति के बाद प्रभावी रूप से खाली होता है, जो हमें कोड लेआउट का उपयोग करके >
और <
नीचे दिए गए निहित शून्य पर गोल्फ की अनुमति देता है । >
निचली पंक्ति लपेटता के आसपास इतना है कि नीचे बाईं ओर नीचे दाएँ से आईपी चलता है, और <
बदलाव पंक्ति वापस। आईपी फिर लूप को जारी रखने के लिए बाएं कॉलम को खुशी से आगे बढ़ाता है।
भूलभुलैया पॉप n
और धक्का में अंक 10*n + <digit>
। इसके अलावा, आउटपुट होने से पहले चार्ज़ को मोडुलो 256 लिया जाता है। इन दोनों को एक साथ रखने से हमें `33
32 (स्पेस) तक 95 (अंडरस्कोर) आउटपुट मिलता है , जो काम करता है -3233 % 256 = 95
। हालाँकि, 32 को 95 में बदलना ;95
सबसे आसान तरीका है ( सबसे आसान), यहाँ एक नकारात्मक संख्या के साथ काम करने से हमें बाएँ मुड़ने के साथ कोड को थोड़ा संकुचित करने की अनुमति मिलती है।