Stackylogic एक प्रोग्रामिंग भाषा है जिसे मैंने पिछली चुनौती में बनाया था: Run Stackylogic । पूरी जानकारी और उदाहरण के लिए उस पोस्ट को पढ़ें, लेकिन यहां बताया गया है कि यह कैसे काम करता है:
Stackylogic इनपुट के लिए लेता है
0और1एक0या1पूरा होने पर आउटपुट देता है ।एक प्रोग्राम में ऐसी लाइनें होती हैं जिनमें केवल अक्षर होते हैं और
01?साथ ही<लाइनों में से एक के अंत में एक होता है। लाइन्स खाली नहीं हो सकती और के साथ लाइन<में कम से कम एक होना चाहिए0,1या?यह पहले।यहाँ एक नमूना कार्यक्रम है जो दो बिट्स के NAND की गणना करता है :
1 ?< 11 ? 0एक कार्यक्रम में प्रत्येक पंक्ति को एक स्टैक माना जाता है , जिसमें बाईं ओर नीचे और दाईं ओर शीर्ष होता है। स्पष्ट रूप से, एक कार्यक्रम में पहली पंक्ति से पहले और अंतिम पंक्ति के बाद एक खाली स्टैक (यानी खाली लाइन) है।
<, कर्सर कहा जाता है, के निशान स्टैक पर शुरू करने के लिए जब एक कार्यक्रम चलाया जाता है। निष्पादन की कार्यवाही निम्नानुसार है:
वर्तमान में इंगित किए जा रहे कर्सर को स्टैक से शीर्ष वर्ण पॉप करें।
- यदि चरित्र है
?, तो उपयोगकर्ता को a0या a के लिए संकेत दें1और मान लें कि वह चरित्र था।- यदि चरित्र है
0, तो कर्सर को एक स्टैक अप करें (वर्तमान लाइन के ऊपर की रेखा पर)।- यदि चरित्र है
1, तो कर्सर को एक स्टैक डाउन (वर्तमान लाइन के नीचे की रेखा पर) ले जाएं।यदि स्टैक कर्सर को खाली करने के लिए ले जाता है, तो पिछले मान को स्टैक (हमेशा
0या एक1) से पॉपअप किया गया था , और प्रोग्राम समाप्त करें।एल्स, यदि स्टैक कर्सर को स्थानांतरित करने के लिए खाली नहीं है, तो चरण 1 पर वापस जाएं और प्रक्रिया को दोहराएं।
इस चुनौती के लिए महत्वपूर्ण बात यह है कि सभी स्टैकलॉजिक कार्यक्रम एक सत्य तालिका के समान हैं । बूलियन मानों की कुछ पूर्व निर्धारित संख्या इनपुट होती है और ठीक एक बूलियन नियत रूप से आउटपुट होता है।
तो आपका काम एक स्टैक्ग्लोगिक कार्यक्रम का उत्पादन करना है जो संतुष्ट या अनुकरण करता है, अर्थात किसी भी दिए गए सत्य तालिका के समान आउटपुट है। लेकिन यह स्पष्ट नहीं है कि स्टैकलॉजिक किसी भी सत्य तालिका का अनुकरण कर सकता है , इसलिए यहां प्रेरण द्वारा एक प्रमाण दिया गया है :
मुख्य मामला
दो 0-इनपुट सत्य तालिकाओं में हमेशा आउटपुट
0या1। इन तालिकाओं के स्टैकलोजिक समकक्ष क्रमशः0<और1<हैं।आगमनात्मक कदम
Stackylogic किसी भी एन-इनपुट सत्य तालिका का अनुकरण कर सकते हैं। आज्ञा देना M = N + 1।
एक एम-इनपुट टेबल, टी, को दो एन-इनपुट टेबल, टी 0 और टी 1 के रूप में व्यक्त किया जा सकता है , साथ ही अतिरिक्त इनपुट बिट बी। जब बी 0 होता है, तो टी 0 के परिणाम का उपयोग किया जाता है। जब बी 1 होता है, तो टी 1 के परिणाम का उपयोग किया जाता है।
उदाहरण के लिए, 3-इनपुट सत्य तालिका स्यूडोकोड के अनुरूप है
if B: result = x OR y else: result = x NAND yहै
B x y | result 0 0 0 | 1 0 0 1 | 1 0 1 0 | 1 0 1 1 | 0 1 0 0 | 0 1 0 1 | 1 1 1 0 | 1 1 1 1 | 1जो वास्तव में नंद के लिए दो 2-इनपुट सत्य तालिकाएं हैं और OR एक दूसरे के ऊपर muxing बिट बी के साथ खड़ी हैं।
S 0 और S 1 को स्टैकलॉजिक प्रोग्राम कहते हैं जो क्रमशः T 0 और T 1 को संतुष्ट करते हैं (हम जानते हैं कि ये पहली धारणा के आधार पर मौजूद हैं)। कार्यक्रम S जो T को संतुष्ट करता है उसका निर्माण निम्न प्रकार से किया जा सकता है:
[lines of S0 excluding the cursor, with 0 appended to all lines below the cursor] ?< [lines of S1 excluding the cursor, with 1 appended to all lines above the cursor]यह व्यवस्था पहले इनपुट बिट (लाइन से ) के आधार पर S 0 और S 1 के बीच प्रभावी रूप से मेल करती है
?<। यदि यह है0, तो कर्सर0एस 0 के मूल कर्सर की स्थिति के लिए अपेंडेड सवारी करेगा , जो तब खाली स्टैक द्वारा ऊपर और नीचे की सीमा पर होगा, और इस तरह मूल एस 0 के बिल्कुल समान होगा । इसी तरह, यदि1इनपुट है, तो कर्सर1एस 1 के कर्सर स्थिति पर सवारी करेगा और इसे निष्पादित करने के लिए आगे बढ़ेगा जैसे कि यह अकेला था।उदाहरण के लिए, OR और NAND के लिए स्टैकलॉजिक प्रोग्राम हैं
? ?<तथा
1 ?< 11 ? 0उन्हें अनुकरण करने के लिए जोड़ा जा सकता है
if B: result = x OR y else: result = x NAND yइस तरह:
1 ? 110 ?0 00 0 ?< ?1 ?इस प्रकार, किसी भी सत्य तालिका को स्टैकलॉजिक प्रोग्राम द्वारा अनुकरण किया जा सकता है।
चुनौती
एक प्रोग्राम या फ़ंक्शन लिखें जो 2 एन बूलियन मानों की एक सूची के रूप में एन इनपुट सत्य तालिका (एन> 0) में होता है जो आरोही बाइनरी ऑर्डर में तालिका के आउटपुट का प्रतिनिधित्व करते हैं।
कोई भी उचित इनपुट प्रारूप ठीक है। उदाहरण के लिए एक सत्य तालिका
x y | OR
0 0 | 0
0 1 | 1
1 0 | 1
1 1 | 1
इनपुट की इन शैलियों में से कोई भी ठीक होगा:
0111
0, 1, 1, 1
0
1
1
1
[False, True, True, True]
सत्य तालिका को संतुष्ट करने वाले स्टैक्ग्लॉजिक प्रोग्राम को प्रिंट करें या लौटाएं, यानी सटीक एक ही आउटपुट को एक ही इनपुट दिया गया है। कोई भी परिमित प्रोग्राम जो उस तालिका को संतुष्ट करता है वह मान्य आउटपुट है। आपको निर्माण के प्रेरक प्रमाण की विधि का पालन करने की आवश्यकता नहीं है। Stackylogic प्रोग्राम को बहुत कम होने की आवश्यकता नहीं है।
उदाहरण के लिए, यदि इनपुट थे 11100111, तो एक वैध आउटपुट होगा
1
?
110
?0
00
0
?<
?1
?
लेकिन कई अन्य हैं।
बाइट्स में सबसे छोटा कोड जीतता है।
यदि आपको दुभाषिया की आवश्यकता है तो मूल स्टैकलॉजिक चुनौती देखें ।