?1-(v #1)-
1 0v ^(# 0 (1+0)#)!
(#) ^#1-(0)#
यदि एक मानक अनुरूप दुभाषिया का उपयोग किया जाता है, तो यह इनपुट और आउटपुट को बाइट मान के रूप में लेता है । वास्तव में STDIN / STDOUT पर दशमलव संख्या का उपयोग करने के लिए, आपको एक अतिरिक्त विकल्प के साथ अजगर दुभाषिया की आवश्यकता होगी ।NUMERIC_OUTPUT = TrueNUMERIC_INPUT = True
व्याख्या
कार्यक्रम का कंकाल है
?1-( 1 -
1 )!
हमने Nपहली आवाज़ पर इनपुट पढ़ा और इसे प्राप्त करने के लिए इसे घटाया N-1। हम दूसरी आवाज़ को भी इनिशियलाइज़ करते हैं 1। फिर हम N-1एक बार लूप करते हैं, जिसमें से प्रत्येक पुनरावृत्ति को दूसरे स्टैक पर अनुक्रम का अगला मूल्य मिलता है। अंत में हम Nवें नंबर को प्रिंट करते हैं ।
कार्यक्रम का विचार अनुक्रम के प्रत्येक तत्व को तीसरी आवाज़ पर एक कतार में रखना है, और प्रत्येक पुनरावृत्ति में उस कतार के प्रमुख को निकालना है। जब सिर पहुंचता है 0, तो हम अनुक्रम के मूल्य में वृद्धि करते हैं और इसे हटा देते हैं 0।
अब मुद्दा यह है कि प्रेड्यू स्टैक का उपयोग करता है न कि कतारों का। इसलिए हमें कतार की तरह उपयोग करने के लिए उस ढेर के चारों ओर शिफ्ट करने की आवश्यकता है।
v #
0v ^
(#)
यह अनुक्रम के वर्तमान मूल्य को पहली आवाज़ (एक अस्थायी प्रतिलिपि के रूप में) की प्रतिलिपि बनाता है, 0दूसरी आवाज़ पर (कतार के अंत को चिह्नित करने के लिए ) धक्का देता है । और फिर दूसरे पर तीसरे स्टैक को शिफ्ट (और इस तरह रिवर्स) करने के लिए एक लूप करता है। लूप के बाद, हम वर्तमान अनुक्रम मान की प्रतिलिपि दूसरे स्टैक के ऊपर रखते हैं (जो हमारी कतार की पूंछ है)।
)
(#
^#1-
यह थोड़ा बदसूरत दिखता है, लेकिन अनिवार्य रूप से यह एक लूप है जो स्टैक को तीसरी आवाज़ पर वापस शिफ्ट करता है। चूंकि )स्थानांतरण निर्देश के समान कॉलम में है, 0हम पहले दूसरी आवाज पर रखते हैं, तीसरी आवाज पर भी समाप्त हो जाएगा, इसलिए हमें इसे दूसरे के साथ निकालने की आवश्यकता है #। फिर तीसरी आवाज के शीर्ष पर, यानी कतार के शीर्ष को घटाएं।
अब यह थोड़ा कष्टप्रद हो जाता है - हम कुछ कोड चलाना चाहते हैं जब वह मान होता है 0, लेकिन प्रिल्यूड की एकमात्र नियंत्रण संरचना (लूप) केवल गैर-शून्य मानों पर प्रतिक्रिया करती है।
0 (1+0)#
(0)#
ध्यान दें कि दूसरी आवाज़ का शीर्ष सत्य है (चूँकि गोलम अनुक्रम में कोई 0s नहीं है )। तो काम का बोझ उस आवाज़ (कोष्ठक की बाद वाली जोड़ी) में चला जाता है। अगर कतार का सिर अभी तक नहीं है, तो हमें इसे रोकने की आवश्यकता है 0। तो पहले हमारे पास तीसरी आवाज पर एक "लूप" है जो 0दूसरी आवाज पर धक्का देता है अगर कतार का सिर अभी भी गैर-शून्य है। हमने 0लूप से बाहर निकलने के लिए तीसरी आवाज भी लगाई । #तीसरे आवाज पर तो या तो उस को हटा 0, या कतार के सिर को हटा अगर है कि पहले से ही शून्य था। अब वह दूसरा लूप केवल तभी दर्ज किया जाता है जब कतार का सिर शून्य था (और0दूसरी आवाज पर कभी धक्का नहीं दिया गया)। उस स्थिति में हम अनुक्रम के वर्तमान मूल्य को बढ़ाते हैं और 0लूप से बाहर निकलने के लिए धक्का देते हैं । अंत में, 0स्टैक के शीर्ष पर हमेशा रहेगा , जिसे हमें त्यागने की आवश्यकता है।
मैंने आपको बताया था कि प्रेग्नेंसी में तार्किक नकारात्मक गुस्सा है ...
nबजाय उपयोग करता है2 - n % 1। क्या आपके पास उत्तर अलग-अलग होने की अपेक्षा करने का कोई कारण है?