बर्लेस्क, 40 बाइट्स
ri#Q2 SH ~- "ri#Q" \/ .+ j "<-" ps if sh
स्पष्टीकरण:
बर्लेस्क में उन्नत स्टैक और कोड हेरफेर बिल्ट-इन है। वास्तव में, आप प्रोग्राम के स्रोत कोड का उपयोग नहीं कर सकते हैं, लेकिन आप भविष्य में निष्पादित होने वाले शेष कोड तक पहुंच सकते हैं। इसका मतलब यह है कि #Q
इसके बाद आने वाले सभी कोड वापस आ जाएंगे, यही वजह है कि हमें #Q
उस कोड में सब कुछ जोड़ना होगा जो हम कर रहे हैं ri#Q
।
blsq ) #Q1 2++
12 -- this is the result of 1 2++
{1 2 ++} -- this is the result of #Q
++1 2
स्टैक आधारित होने के कारण तकनीकी रूप से अवैध कोड है। लेकिन हम इसे निष्पादित करने के लिए कोड में हेरफेर कर सकते हैं 1 2++
:
blsq ) #Q<-#q++1 2
12
इन बिल्ट-इन के साथ काम करना अविश्वसनीय रूप से पेचीदा है और किसी ने भी अभी तक क्वीन से संबंधित चीजों के अलावा किसी भी उत्पादक के लिए इसका इस्तेमाल नहीं किया है। यदि आप उलट जाते हैं ++1 2
तो आपको 2 1++
उत्पादन मिलेगा 21
और नहीं 12
। ऊपर दिए गए कोड 12
का कारण #Q
यह है क्योंकि इसमें भी <-
इतना ही शामिल है कि हम अंत में बहुत अधिक निष्पादित कर रहे हैं 2 1++
: p। हम निष्पादन को समाप्त करते हैं 2 1++#q<-
जो पैदा करता है 12
।
हम वास्तव में हमारे कोड में चीजों को बदल सकते हैं उदाहरण के लिए यह कोड ?+
अपने आप में सभी घटनाओं को प्रतिस्थापित करता है?*
blsq ) #Q(?+)(?*)r~5.-#q5 5?+
25
उपयोग:
$ echo "1" | blsq --stdin 'ri#Q2 SH ~- "ri#Q" \/ .+ j "<-" ps if sh'
hs fi sp "-<" j +. /\ "Q#ir" -~ HS 2Q#ir
$ echo "0" | blsq --stdin 'ri#Q2 SH ~- "ri#Q" \/ .+ j "<-" ps if sh'
ri#Q2 SH ~- "ri#Q" \/ .+ j "<-" ps if sh