-X
इसे ऑनलाइन आज़माएं!
रिवर्स की कोशिश करो!
व्याख्या
स्टैक कैट्स में पिछली चुनौती की तुलना में यह वास्तव में बहुत आसान है। पूरा कार्यक्रम (आवेदन करने के बाद -m
) यहाँ है -X-
।X
टेप सिर के बाएं और दाएं को स्वैप करने के लिए उपयोग किया जाता है, अर्थात यह प्रारंभिक स्टैक को बिल्कुल भी प्रभावित नहीं करता है, इसलिए हम इसे अनदेखा कर सकते हैं। लेकिन तब कार्यक्रम प्रभावी रूप से बस होता है--
(दो बार स्टैक के शीर्ष पर नकारात्मक), जो कुछ भी नहीं करता है।
उलटा कार्यक्रम के लिए, आवेदन -m
देता है X-X
। फिर, X
कुछ भी नहीं करता है, इसलिए कार्यक्रम प्रभावी रूप से बस है-
, जो स्टैक के शीर्ष को नकारता है।
केवल अन्य 2-बाइट समाधान है -=
, लेकिन यह लगभग समान है। फर्क सिर्फ इतना है कि=
केवल बगल के ढेर के शीर्ष पर स्वैप , न कि पूरे ढेर पर।
लेकिन फिर से, उपयोग करना -m
धोखा देने जैसा महसूस होता है, इसलिए नीचे एक समाधान है जो पूरी तरह से प्रतिबिंबित प्रोग्राम का उपयोग करता है।
:I<->I:
इसे ऑनलाइन आज़माएं!
रिवर्स की कोशिश करो!
व्याख्या
पिछले उत्तर के विचार अभी भी लागू होते हैं : किसी भी मान्य समाधान को युग्मित वर्णों का उपयोग करने की आवश्यकता होती है और I
। छह संभावित समाधान (टीआईओ लिंक में शामिल) सभी लगभग समान हैं। -
और _
इस कार्यक्रम में बराबर हैं, और उनके :
द्वारा प्रतिस्थापित किया जा सकता है |
या T
(जो गैर-शून्य इनपुट के लिए भी ऐसा ही करते हैं और संयोग से शून्य इनपुट के लिए भी काम करते हैं)। मैंने इसे केवल इसलिए समझाया क्योंकि यह सबसे आसान है।
इसलिए याद रखें कि प्रारंभिक स्टैक इनपुट के ऊपर -1
(असीम रूप से कई शून्य के ऊपर) रखता है जबकि टेप के साथ अन्य सभी ढेर केवल शून्य को धारण करते हैं। स्टैक कैट्स के पास यह संपत्ति भी है कि कोई भी सम-लंबाई कार्यक्रम कुछ भी नहीं करता है (बशर्ते कि यह समाप्त हो जाए, लेकिन हम इसके लिए लूप का उपयोग नहीं कर सकते हैं)। फिर किसी भी विषम-लंबाई कार्यक्रम के लिए स्पष्ट रूप से सच है जिसका केंद्र चरित्र कुछ भी नहीं करता है ... आइए देखें:
: Swap the input with the -1 below.
I Move the -1 one stack to the left and turn it into +1.
< Move another stack left (without taking the value).
- Negate the zero on top of that stack (i.e. do nothing).
इसलिए, कार्यक्रम का दूसरा आधा भाग पहले आधे हिस्से को पूर्ववत कर देता है और हम एक के शीर्ष पर इनपुट के साथ समाप्त होते हैं -1
फिर से ।
उलटा कार्यक्रम है :I>-<I:
। आइए देखें कि कैसे चीजें बदलती हैं:
: Swap the input with the -1 below.
I Move the -1 one stack to the left and turn it into +1.
> Move one stack right, i.e. back onto the initial stack which still holds the input.
- Negate the input.
< Move back to the left where we've parked the 1.
I Move that 1 back onto the initial stack and turn it back into a -1.
: Swap the -1 below the negated input to act as an EOF marker.