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