Stackylogic एक तर्क आधारित प्रोग्रामिंग भाषा मैं में है कि ले बना हुआ है 0
की और 1
इनपुट के लिए की है और एक ही आउटपुट 0
या 1
पर पूरा होने के।
एक स्टैकलॉजिक प्रोग्राम में लाइनें शामिल होती हैं जिसमें केवल तीन वर्णों के 01?
साथ-साथ <
लाइनों में से एक के अंत में एक भी शामिल हो सकता है। लाइन्स खाली नहीं हो सकती और के साथ लाइन <
में कम से कम एक होना चाहिए 0
, 1
या ?
यह पहले।
यहाँ एक नमूना कार्यक्रम है (जैसा कि मैं समझाता हूँ) दो बिट्स के NAND की गणना करता है :
1
?<
11
?
0
Stackylogic प्रोग्राम की प्रत्येक पंक्ति को एक स्टैक माना जाता है , जिसमें बाईं ओर नीचे और दाईं ओर शीर्ष होता है। स्पष्ट रूप से, एक कार्यक्रम में पहली पंक्ति से पहले और आखिरी पंक्ति के बाद एक खाली स्टैक (खाली लाइन) होता है।
<
है, जो हम फोन करता हूँ कर्सर , निशान स्टैक पर शुरू करने के लिए जब एक Stackylogic कार्यक्रम चलाया जाता है। इस तरह के रूप में एक Stackylogic कार्यक्रम आय का निष्पादन:
वर्तमान में कर्सर जिस स्टैक को इंगित कर रहा है, उसके शीर्ष वर्ण को पॉप करें।
- यदि चरित्र है
?
, तो उपयोगकर्ता को a0
या a के लिए संकेत दें1
और मान लें कि वह चरित्र था। - यदि चरित्र है
0
, तो कर्सर को एक स्टैक अप करें (वर्तमान लाइन के ऊपर की रेखा पर)। - यदि चरित्र है
1
, तो कर्सर को एक स्टैक डाउन (वर्तमान लाइन के नीचे की रेखा पर) ले जाएं।
- यदि चरित्र है
यदि स्टैक कर्सर को खाली करता है, तो पिछले मान को स्टैक (हमेशा
0
या एक1
) से पॉपअप किया गया है , और प्रोग्राम को समाप्त करें।एल्स, यदि स्टैक कर्सर को स्थानांतरित करने के लिए खाली नहीं है, तो चरण 1 पर वापस जाएं और प्रक्रिया को दोहराएं।
ध्यान दें कि स्टैकलॉजिकल प्रोग्राम हमेशा समाप्त होते हैं क्योंकि उन्हें अंततः अपने स्टैक को पूरा करना होगा।
नंद उदाहरण
NAND प्रोग्राम में कर्सर एक पर शुरू होता है ?
:
1
?<
11
?
0
हम मान लेते हैं कि एक 1
बार ?
पॉपअप होने पर उपयोगकर्ता इनपुट करेगा, जिसका अर्थ है कि कर्सर नीचे जाएगा, जिससे प्रोग्राम इस तरह दिखाई देगा:
1
11<
?
0
अब 1
कर्सर स्टैक के शीर्ष पर एक मैदान है। यह विधिवत रूप से बंद है और कर्सर फिर से चलता है:
1
1
?<
0
अब उपयोगकर्ता इनपुट के 0
लिए मान लें ?
, जिसका अर्थ है कि कर्सर ऊपर जाएगा:
1
1<
0
फिर से, 1
कर्सर स्टैक पर है इसलिए कर्सर पॉप होता है और नीचे जाता है:
1
<
0
अंत में कर्सर स्टैक खाली होता है, इसलिए अंतिम मान पॉप होता है, 1
आउटपुट होता है और प्रोग्राम समाप्त होता है।
यह एक NAND गेट के लिए सटीक है क्योंकि 1 NAND 0
है 1
। यदि आप जांचना चाहते हैं तो यह पाठ्यक्रम अन्य तीन दो-बिट इनपुट के लिए काम करता है।
या उदाहरण है
यह स्टैकलॉजिक प्रोग्राम एक OR गेट का अनुकरण करता है :
?
?<
यह देखना आसान है कि 1
कर्सर का एक प्रारंभिक इनपुट कर्सर को अंतिम पंक्ति के नीचे निहित खाली स्टैक में धकेल देगा, कार्यक्रम को समाप्त करने और 1
इसे केवल इनपुट करने के लिए आउटपुट देगा।
00
दूसरी ओर एक इनपुट के लिए, कर्सर शीर्ष पर निहित खाली स्टैक के लिए अपना रास्ता बना देगा, प्रोग्राम को समाप्त करके 0
इनपुट होने के लिए अंतिम आउटपुट देगा।
चुनौती
एक प्रोग्राम या फ़ंक्शन लिखिए जो स्टैकलॉजिक प्रोग्राम को एक स्ट्रिंग के रूप में लेता है और इसे चलाता है, जिसके परिणामस्वरूप 0
या वापस लौटता है 1
।
पर ?
के लिए, आप एक के लिए उपयोगकर्ता का संकेत दे सकता 0
या 1
इनपुट, या का एक पूर्व निर्धारित स्ट्रिंग से मूल्य को पढ़ने 0
के लिए और 1
के है कि आप भी इनपुट के रूप में लेते हैं। (यह आपके प्रोग्राम / फ़ंक्शन के लिए एक और स्ट्रिंग इनपुट हो सकता है या आप प्रोग्राम स्ट्रिंग की पहली या अंतिम पंक्ति इनपुट स्ट्रीम हो सकते हैं)।
आप प्रोग्राम मान सकते हैं और इनपुट हमेशा अच्छी तरह से बनता है। आप वैकल्पिक रूप से मान सकते हैं कि इनपुट प्रोग्राम एक एकल अनुगामी न्यूलाइन के साथ आते हैं (हालांकि याद रखें कि अंत में एक निहित खाली स्टैक है)।
बाइट्स में सबसे छोटा कोड जीतता है।
अधिक नमूना कार्यक्रम
ZERO
0<
ONE
1<
BUFFER
?<
NOT
1
?<
0
AND
?<
?
NAND
1
?<
11
?
0
OR
?
?<
NOR
1
?
00
?<
0
XOR(v1)
?
0
1?<
?
0
XOR(v2)
?
?<
11
?
0
XNOR(v1)
1
?
0?<
1
?
XNOR(v2)
1
?
00
?<
?
MEDIAN(v1)
1
???<
0
MEDIAN(v2)
?
1?<
??
मंझले कार्यक्रमों के लिए धन्यवाद मार्टिन ।
1\???<\0
:।
111\???????<\000
।
?\1?<\??
:। वैकल्पिक रूप से, यहां एक सममित 5-लाइन कार्यान्वयन है:?\?0\?<\?1\?