> <> (मछली), १० 107 106 १०३ बाइट्स
<v}:{r&" "
1xv+
2<v+
v}<
<~v!?=&:&:
6.>ol2-?!;a
:{{:}l1-[rv
v2<
<1x|!}:}-1<v!?:{{:o-+
^3<v ~}}r]~<
.40<
इसे ऑनलाइन आज़माएं!
यह सुपर यादृच्छिक नहीं है, लेकिन यह यादृच्छिक है। बस स्ट्रिंग और पूर्णांक को स्टैक पर रखें (उदाहरण: "हैलो वर्ल्ड!", 5)।
Input: "Hello world!", 5
Output: H^\^]^eceeedldcdeclgfffhowhhfggojkkkkrdccedl]]\]\d
पूर्ण व्याख्या
यह कोड का थोड़ा पुराना संस्करण है, जब तक मैं स्पष्टीकरण को अपडेट नहीं करता। यह ज्यादातर एक ही है, शायद पढ़ने में थोड़ा आसान है:
< v}:{r&" "
+1xv
+2<v
}
:&:<~ v!?=&
?!;a6.>ol2-
:{{:}l1-[rv
v2<
<1x|!}:}-1<v!?:{{:o+*
^3<v ~}}r]~<
.43<
हम दिखावा करेंगे स्ट्रिंग पैरामीटर है sऔर पूर्णांक पैरामीटर है i।
< v}:{r&" "
<मछली तुरंत स्थानांतरित करने के लिए छोड़ दिया है, जो करने के लिए इर्द-गिर्द घूमती बताता " "है, जो एक अंतरिक्ष ढेर करने के लिए characted कहते हैं। फिर मछली यात्रा करती है &, जो अंतरिक्ष को रजिस्टर में जोड़ती है। rस्टैक को उलट देता है और {:}स्टैक को बाईं ओर रखता है (स्टैक iके अंत पर डालते हुए), स्टैक के अंत पर मूल्य को कॉपी करता है, फिर इसे दाईं ओर शिफ्ट करता है। vमछली को नीचे की ओर बढ़ना शुरू करने के लिए कहता है।
+1xv
+2<v
}
xमछली को एक यादृच्छिक दिशा में ले जाने के लिए कहता है, जिसके परिणामस्वरूप मछली सही हो रही है और नीचे की ओर जा रही है, 1+या 2+पहले या बाद में गुजरती है । ये स्टैक के अंत में संख्या में क्रमशः 1 या 2 जोड़ते हैं। यदि मछली ऊपर की ओर जाती है, तो वह vफिर से टकराती है और वापस नीचे की ओर यात्रा करती है। }स्टैक को दाईं ओर शिफ्ट करता है, फिर स्टैक iपर स्थिति 1 पर और स्थिति 0 पर नया चर (हम इसे कॉल करेंगे m)।
:&:<~ v!?=&
यह खंड एक फ़ंक्शन है, इसे व्हाट्सएपट्रीमर कहते हैं । यह जहां से शुरू होता है< है। यह बस स्ट्रिप्स के अंत में स्ट्रिप्स (ताकि स्ट्रिंग की शुरुआत) के अंत तक रिक्त स्थान है जब तक कि यह एक गैर-अंतरिक्ष चरित्र में नहीं चलता।
तो तुरंत मछली एक में तैरती है <और बाईं ओर यात्रा करनी चाहिए। यह तब चलता है, :&:&जो स्टैक के अंत में मूल्य को कॉपी करता है, स्टैक के अंत में रजिस्टर से स्थान रखता है, इसे कॉपी करता है, फिर इसे रजिस्टर पर वापस रखता है।
फिर मछली हिट करती है =?!v ~, या अधिक विशेष रूप से =, जो पिछले दो मूल्यों (जो हमने अभी बनाया है) को स्टैक से दूर करता है, उनकी तुलना करता है, स्टैक के अंत में 1 रखता है यदि वे बराबर हैं, और एक 0 पर यदि वे अलग हैं तो स्टैक का अंत। ?ढेर के अंत नया मान दिखाई दे, अगर यह 0 यह अगले निर्देश, इस मामले में है जो निष्पादित नहीं करता है !, यह बजाय कार्यान्वित vहै, जो आदेश मछली नीचे की ओर ले जाने के लिए (समारोह से बाहर निकलते समय)।
यदि यह 1 हालांकि है, तो इसे एक जगह मिल गई है, इसलिए यह !एक ट्रम्पोलिन है, और जो मछली को अगले निर्देश को छोड़ देता है, जो कि ए है, इसलिए इसे निष्पादित करता है v, इसलिए मछली जारी है। मछली के सामने, यह देखता है~ कि इसे स्टैक से अंतिम मान पॉप करने के लिए कहता है (एक स्थान होने की पुष्टि की गई है), फिर मछली जारी है, और फिर से फ़ंक्शन चलाता है।
?!;a6.>ol2-
मछली को तुरंत कहा जाता है कि वह दाईं ओर तैरती है >, फिर स्टैक पर अंतिम पात्र का उत्पादन करती हैo (जो, पहली बार यह चलाया जाता है, यह पहला चरित्र है s)। यह स्टैक की लंबाई से प्राप्त होता है l, स्टैक 2के अंत में स्थित होता है, फिर -2 को इससे घटाया जाता है l। यह हिट ?!;करता है, जो यह याद रखता है कि ?मछली किस कारण से छोड़ती है! अगर स्टैक खाली है, और जमीन पर; , जो प्रोग्राम को समाप्त करता है।
यदि स्टैक पर अभी भी अक्षर हैं, तो हम निष्पादित करते हैं ! जिसके कारण मछलियां उछलती हैं ;और निष्पादित होती हैं a6., जो स्टोर a(AKA 10), और 6स्टैक के अंत में होती हैं, जिसके लिए x, yनिर्देशांक हैं. , जो उन्हें समाप्त होने पर पॉप करता है स्टैक, फिर मछली को टेलीपोर्ट करता है10, 6 और उस पोस्ट के दाईं ओर निर्देश निष्पादित करता है (जैसा कि मछली सही तैर रही है)।
जब आप yस्थिति 6 को महसूस करते हैं तो यह कम जटिल होता है । xस्थिति 10 तो है v, और उस के दाईं ओर है , जो कि एक सेशन नहीं है। यह मछली को तैरना जारी रखने का कारण बनता है और वास्तव में लाइन की शुरुआत में निष्पादन शुरू करता है ...
:{{:}l1-[rv
v2<
<1x|!}:}-1<v!?:{{:o+*
^3<v ~}}r]~<
.43<
तो यह फ़ंक्शन है जो वर्णों के बीच यादृच्छिक पाठ जोड़ता है। यह एक कौर है, लेकिन यह सिर्फ इसलिए है क्योंकि मैंने इसे थोड़ा अतिरिक्त बनाने की कोशिश की थी। इसको बुलाते हैं genRandomChars ।
:{{:}l1-[rvवास्तव में समारोह के लिए सेटअप, और कम-तो वास्तविक समारोह ही एक हिस्सा है। मछली पहले तैरती है, :{{जो स्टैक के अंत में मूल्य को कॉपी करती है, फिर इसे बाईं ओर दो बार स्थानांतरित करती है। यदि आपको याद है कि iस्टैक पर पोस्ट 1 था, तो आपको पता होगाi स्टैक के अंत में अब है।
मछली फिर :}उस प्रतियां पर तैरती है i, और स्टैक को दाईं ओर शिफ्ट करती है, स्टैक iकी शुरुआत और अंत दोनों पर। l1-[मछली ने ढेर के अंत में लंबाई रखी है, उसमें से 1 घटाएं, फिर[ एक नया स्टैक बनाता है, नए स्टैक के l-1लिए मान (स्टैक लंबाई माइनस 1) मान (ताकि iपुराने स्टैक पर बस निकल जाए )। फिर मछली बस हिट करती है rvजो स्टैक को फिर से उलट देती है (मुझे लगता है कि एक नया स्टैक बनाने से यह किसी कारण से उलट हो जाता है), और मछली को एक बार फिर नीचे की ओर तैरने का आदेश देता है, फलस्वरूप फंक्शन की शुरुआत करता है< ।
तो वर्तमान में स्टैक का अंत है mऔर हमारा अस्थायी है i, जिसे हम कॉल करेंगे ti। तुरंत मछली तैरती है 1-}, जो 1 से घटाती हैti और इसे ढेर की शुरुआत में ले जाती है। फिर :}जो बस कॉपी करता है mऔर इसे स्टैक की शुरुआत में ले जाता है (डाल रहा हैti स्टैक स्थिति 1 पर )।
यह तब होता है जब हम इस छोटी सी चीज को मारते हैं:
v2<
<1x|!
^3<
यह वास्तव में मृत सरल है। !मछली को छोड़ने |और निष्पादित करने का कारण बनता है x। क्या याद कर रहे होx करता है, हमें याद है कि यह मछली किसी भी 4 दिशाओं में चलती है। |बस एक दर्पण है, और मछली को वापस तैरने का कारण बनता हैx । तो मूल रूप से, मछली स्टैक के अंत में 1, 2, या 3 जगह लेगी, और बाईं ओर घूमना जारी रखेगा।
मछली तब निष्पादित होती है *+oजो स्टैक पर अंतिम दो मानों को पॉप-अप होने का कारण बनाती है, एक साथ गुणा किया जाता है, और परिणाम फिर से आगे बढ़ता है, फिर एक ही चीज को जोड़ दिया जाता है, फिर अंतिम मूल्य स्टैक से पॉपअप किया जाता है और इसके साथ आउटपुट होता है o। हमारे ढेर अब फिर से अपेक्षाकृत सामान्य है जिसमें सिर्फ [ m, ti,s ]।
:}}:स्टैक के अंत पर मूल्य का कारण बनता है (मूल रूप से sस्थिति 0) ओटी को कॉपी किया जाता है, फिर स्टैक को दाईं ओर दो बार स्थानांतरित किया जाता है ( tiफिर से सामने की तरफ रखकर ), फिर tiकॉपी किया जाता है। ?!vअब तक समझना बहुत आसान होना चाहिए। मूल रूप से यदि ti0 है तो हम फंक्शन से बाहर निकलते हैं v, अन्यथा हम निष्पादित करते हैं !और छोड़ते हैंv (दूसरा लूप करते हुए)।
यदि ti0 है और हम थोड़े यादृच्छिक वर्णों को आउटपुट करते हैं, तो हम निष्पादित करते हैंv और देखते हैं:
v ~}}r]~<
.43<
यहां कुछ भी नहीं फैंसी। हम tiस्टैक से हटाते हैं ~। फिर ]नया है, यह स्टैक से हमारे सभी मूल्यों को पॉप करता है और उन्हें पुराने स्टैक पर रखता है! उलट मुद्दा हम साथ रिवर्स की वजह से rहै, तो साथ सही दो बार ढेर बदलाव }}~, सही करने के लिए ढेर shufting, हमें दे रही है [ m, i, s], ~अतिरिक्त दोहराया दूर करने के लिए है s[0]समारोह में पहले से जैसा कि हम इसे अगर आवश्यकता होगी हम एक लूप कर रहे थे (लेकिन हम नहीं, हम बाहर निकल रहे हैं)। vमछली को नीचे तैरने के लिए और >34.(निष्पादन आदेश दिखाने के लिए उल्टा) बताता है, जो मछली को बस बाईं और तैरने के लिए कहता है 3, 4(क्योंकि , जो एकदम सही है क्योंकि हम बाईं ओर यात्रा कर रहे हैं।. यह एक कूद है!)। 3, 4वास्तव में सिर्फ शुरुआत के अधिकार के लिए हैwhitespaceTrimmer
इस सारे तर्क के बाद हम मछली का पालन कर सकते हैं जब तक कि स्टैक अंततः खाली नहीं हो जाता है और प्रोग्राम whitespaceTrimmerनिष्पादित होने के बाद ही बाहर निकलता है।