परिचय
Kipple एक स्टैक-आधारित, गूढ़ प्रोग्रामिंग भाषा है जिसका आविष्कार मार्च 2003 में Rune Berg ने किया था।
किप्पल में 27 स्टैक, 4 ऑपरेटर और एक नियंत्रण संरचना है।
ढेर
स्टैक नाम हैं a
- z
और 32-बिट हस्ताक्षरित पूर्णांक हैं। @
आउटपुट संख्याओं को अधिक सुविधाजनक बनाने के लिए , एक विशेष स्टैक भी है । जब किसी संख्या को धकेला जाता है @
, तो उस संख्या के अंकों के ASCII मान वास्तव में बदले जाते हैं। (उदाहरण के लिए, यदि आप 12 को धक्का देते हैं @
, तो यह 49 और फिर 50 को @
बदलेगा।
i
कार्यक्रम निष्पादित होने से पहले इनपुट को इनपुट स्टैक पर धकेल दिया जाता है। दुभाषिया i
निष्पादन से पहले स्टोर करने के लिए मूल्यों के लिए पूछेगा । निष्पादन समाप्त होने के बाद, आउटपुट स्टैक पर कुछ भी o
ASCII वर्ण के रूप में आउटपुट करने के लिए पॉपअप होता है। चूँकि यह Kipple का एकमात्र IO तंत्र है, इसलिए Kipple प्रोग्राम के साथ बातचीत करना असंभव है।
ऑपरेटर्स
एक ऑपरेंड या तो स्टैक आइडेंटिफ़ायर या हस्ताक्षरित 32 बिट पूर्णांक है।
धक्का: >
या<
सिंटेक्स: Operand>StackIndentifier
याStackIndentifier<Operand
पुश ऑपरेटर ऑपरेटर को बाईं ओर ले जाता है और इसे निर्दिष्ट स्टैक पर धकेलता है। उदाहरण के लिए, 12>a
स्टैक पर मान 12 को धक्का देगा a
। a>b
स्टैक से सबसे ऊपरी मूल्य पॉप होगा a
और स्टैक पर इसे धक्का देगा b
। एक खाली स्टैक को हमेशा वापस रखना 0. a<b
के बराबर है b>a
। a<b>c
से सबसे ऊपर मूल्य चबूतरे b
और दोनों को धक्का c
और a
।
जोड़ें: +
वाक्य - विन्यास: StackIndentifier+Operand
एड ऑपरेटर स्टैक पर सबसे ऊपरी आइटम का योग और स्टैक पर ऑपरेंड को धक्का देता है। यदि ऑपरेंड स्टैक है, तो मान इससे पॉप होता है। उदाहरण के लिए, यदि स्टैक a
का सबसे ऊपरी मूल्य 1 है, तो a+2
उस पर 3 धक्का देगा। यदि a
खाली है, तो a+2
उस पर 2 धक्का देंगे। यदि स्टैक के सबसे ऊपरी मान हैं a
और b
1 और 2 हैं, तो a+b
स्टैक से मान 2 पॉप होगा b
और स्टैक पर 3 पुश करें a
।
घटाएँ: -
वाक्य - विन्यास: StackIndentifier-Operand
सबट्रेक्टर ऑपरेटर ऐड ऑपरेटर की तरह ही काम करता है, सिवाय इसके कि वह जोड़ने के बजाय घटाता है।
स्पष्ट: ?
वाक्य - विन्यास: StackIndentifier?
क्लियर ऑपरेटर स्टैक को खाली कर देता है यदि इसकी सबसे ऊपरी वस्तु 0 है।
दुभाषिया किसी भी चीज़ को अनदेखा करेगा जो ऑपरेटर के बगल में नहीं है, इसलिए निम्न कार्यक्रम काम करेगा a+2 this will be ignored c<i
:। हालाँकि, टिप्पणियों को जोड़ने का उचित तरीका #
चरित्र का उपयोग करना है। #
निष्पादन से पहले एंड-ऑफ-द-लाइन वर्ण के बीच कुछ भी हटा दिया जाता है। ASCII वर्ण # 10 को Kipple में एंड-ऑफ-लाइन के रूप में परिभाषित किया गया है।
संचालन को दो ऑपरेटरों द्वारा साझा किया जा सकता है, उदाहरण के a>b c>b c?
लिए लिखा जा सकता है a>b<c?
।
कार्यक्रम 1>a<2 a+a
में परिणाम होगा a
मूल्यों से युक्त [1 4]
(नीचे से ऊपर) और नहीं [1 3]
। इसी तरह -
ऑपरेटर के लिए।
नियंत्रण संरचना
किप्पल में केवल एक नियंत्रण संरचना है: लूप।
वाक्य - विन्यास: (StackIndentifier code )
जब तक निर्दिष्ट स्टैक खाली नहीं होता है, तब तक मिलान कोष्ठक के भीतर कोड दोहराया जाएगा। लूप में अन्य लूप हो सकते हैं। उदाहरण के लिए, (a a>b)
स्टैक a
पर स्टैक के सभी मूल्यों को स्थानांतरित करेगा b
, हालांकि ऑर्डर उलट हो जाएगा । एक कार्यात्मक समान, लेकिन ऐसा करने का अधिक सुरुचिपूर्ण तरीका है (a>b)
।
उदाहरण
100>@ (@>o)
यह आउटपुट करेगा 100
33>o 100>o 108>o 114>o 111>o 87>o 32>o 111>o 108>o 108>o 101>o 72>o
यह छपेगा "Hello World!"
। जब o
स्टैक आउटपुट किया जा रहा है, तो यह स्टैक के ऊपर से नीचे तक पॉप अक्षरों को शुरू करता है।
#prime.k by Jannis Harder
u<200
#change 200
k<2>m
u-2
(u-1 u>t u>z u<t
(k>e e+0 e>r)
(e>k)
m+1
m>t
m>z
m<t
t<0>z? t?
1>g
(r>b
m+0 m>a
b+0 b>w
(a-1
b+0 b>j
j?
1>s
(j<0>s j?)
s?
(s<0 w+0 w>b s?)
a>t
a>z
t>a
b-1
b>t
b>z
t>b
z<0>t? z?
a?)
b?
1>p
(b<0 b? 0>p)
p?
(p 0>r? 0>p? 0>g)
)
g?
(g m+0 m>k 0>g?)
u?)
(k>@
10>o
(@>o)
)
यह एक प्राइम नंबर जनरेटर है, लेकिन मुझे यकीन नहीं है कि यह कैसे काम करता है।
नियम
आपको एक प्रोग्राम / फ़ंक्शन लिखना होगा जो किप्ले की व्याख्या करता है। यह प्रोग्राम / फ़ंक्शन किसी स्रोत फ़ाइल के माध्यम से Kipple प्रोग्राम प्राप्त कर सकता है, या इसे उपयोगकर्ता से सीधे STDIN के माध्यम से प्राप्त कर सकता है। यदि STDIN उपलब्ध नहीं है, तो इसे कीबोर्ड इनपुट से प्राप्त करना होगा, और तब तक इनपुट प्राप्त करना जारी रखना चाहिए, जब तक कि एक विशिष्ट अप्रतिबंधित वर्ण दर्ज न हो जाए। उदाहरण के लिए, यदि आपके दुभाषिया को x86 मशीन कोड में लिखा गया है, तो इसे कीबोर्ड से चरित्र द्वारा किपल प्रोग्राम वर्ण मिलेगा, और ऐसा तब तक करना जारी रखें जब तक esc(या कोई अन्य कुंजी जो प्रिंट करने योग्य वर्ण का उत्सर्जन नहीं करता है) दबाया जाता है।
यदि कोई त्रुटि है, उदाहरण के लिए एक सिंटैक्स त्रुटि या स्टैक अतिप्रवाह, तो इसे किसी तरह से स्वीकार करना होगा, उदाहरण के लिए, इंटरप्रेटर / कंपाइलर द्वारा उत्पादित 10 के बजाय 10 या रिटर्न संदेशों को वापस करके, लेकिन त्रुटि का पता लगाना न करें ।
कोड गोल्फ के लिए कोई अन्य नियमित नियम इस चुनौती के लिए लागू होते हैं।
आपके कोड को Kipple के नमूने संग्रह में कुछ उदाहरणों के साथ परीक्षण किया जाएगा
यह एक कोड-गोल्फ है । बाइट्स में सबसे छोटा कोड जीत जाएगा। शुभ लाभ!
ध्यान दें कि किप्पल में एक वैकल्पिक ऑपरेटर है "
, लेकिन यह विनिर्देश का हिस्सा नहीं है और आधिकारिक दुभाषिया में सिर्फ एक अतिरिक्त सुविधा है। मैंने यहां इसका उल्लेख नहीं किया है, इसलिए इसे आपके सबमिशन में समर्थित होने की आवश्यकता नहीं है।
यदि आपको विनिर्देश के किसी भी भाग के बारे में कोई संदेह है, तो आप इसे जावा में लिखे गए आधिकारिक दुभाषिया से जांच सकते हैं । यह एक ज़िप फ़ाइल डाउनलोड करेगा जिसमें संकलित कार्यक्रम और स्रोत कोड होगा। इसे GPL के तहत लाइसेंस प्राप्त है।
i
यदि मैं स्रोत कार्यक्रम को स्टड से लेता हूं तो मैं इनपुट के लिए कैसे पूछ सकता हूं ?