पायके, 5 अक्षर
0h.CE
यह एक असीम रूप से बड़ी संख्या में उत्पादन करने में सक्षम है, इसे एक स्ट्रिंग में बदल दिया जाता है और फिर इसे Pyke कोड के रूप में मूल्यांकन किया जाता है।
कोड की व्याख्या:
0
- स्टैक में जोड़ें। यह एक नंबर शुरू करने के लिए आवश्यक है
h
- इससे पहले की संख्या में वृद्धि। इस बार की मनमानी राशि को दोहराकर, आप संख्या बना सकते हैं जो असीम रूप से बड़ी हैं। पाइक बिग्नम का समर्थन करता है क्योंकि यह पायथन में लिखा गया है, जो उन्हें एक डिफ़ॉल्ट के रूप में उपयोग करता है।
.C
- निम्नलिखित एल्गोरिथ्म का उपयोग करके एक संख्या को स्ट्रिंग में बदलें: ( जीथब लिंक )
def to_string(num):
string = ""
while num > 256:
num, new = divmod(num, 256)
string = chr(new) + string
string = chr(num) + string
return string
इस बिंदु तक, हम मनमाने ढंग से मूल्यों के साथ पियर्स में मनमाने ढंग से तार और प्राकृतिक संख्या बना सकते हैं। रेगेक्स के अनुरूप फॉर्म में नंबर बनाए जा सकते हैं 0(h)*
और स्ट्रिंग्स के साथ बनाया जा सकता है 0(h)*.C
। तार और पूर्णांक का एक मनमाना मिश्रण बनाने के लिए उन्हें एक-दूसरे के साथ जोड़ा जा सकता है।
E
- Pyke कोड के रूप में एक स्ट्रिंग का मूल्यांकन करें। यह उसी वातावरण का उपयोग करता है, जैसा कि पहले से चल रहा Pyke कोड इनपुट जैसी चीजों को साझा करेगा।
इस बात का प्रमाण दिया गया कि पाइक ट्यूरिंग कम्प्लीट है।
किसी भाषा को दिखाने का सबसे सरल तरीका है ट्यूरिंग * ब्रेनफ * ck को लागू करके। यह शायद पेक में कई अन्य भाषाओं की तुलना में बहुत कठिन है क्योंकि यह सूची और शब्दकोश संचालन बहुत ही गैर-मौजूद हैं क्योंकि पाइके को क्षेत्र में उनकी आवश्यकता की कमी के कारण बनाया गया है: कोड-गोल्फ ।
सबसे पहले हम ब्रेनफ * ck के लिए एक दुभाषिया बनाते हैं और एक नंबर बनाने के लिए ऊपर दिए गए हमारे एल्गोरिदम का उपयोग करते हुए इसे एनकोड करते हैं और फिर उस नंबर को व्यक्त करते हैं 0
और h
। हम फिर उसी तरह से चलने वाले कोड युक्त स्ट्रिंग बनाते हैं। यदि हम इसे उस पर छोड़ देते, तो हमारे पास जैसा होता, वैसा ही होता
string containing brainf*ck code
string containing brainf*ck interpreter
इसका मतलब यह है कि कोड विपरीत रूप में होना चाहिए क्योंकि पाइक स्टैक पहले आउट हो गया है।
अब मज़ेदार हिस्से के लिए: दिमागी * ck दुभाषिया के साथ 216 बाइट्स!
Q~B"><ht.,".:=B;Z]1=L;W~Bo@D=c"ht"{I~c~LZ@EZ]1~LR3:=L)~c\,qIz.oZ]1~LR3:=L)~c\.qI~LZ@.CpK)~c"<>"{I~c"<>""th".:ZE=ZZ1_qI0=Z~L0"":0]10:=L)Z~LlqI~L~Ll"":1_]10:=L))~c\[qI~LZ@0qI\]~B~o>@~o+h=o))~c\]qI~o\[~B~o<_@-t=o)~o~BlN
यहाँ यह कोशिश करो!
यदि आप कोड को अर्ध-पूर्ण लेकिन संपादन योग्य रूप में आज़माना चाहते हैं , तो इसे यहाँ आज़माएँ!
स्ट्रिंग से संख्या में परिवर्तित करने के लिए, आप निम्न पायथन कोड का उपयोग कर सकते हैं:
def conv(string, t=0):
t *= 256
t += ord(string[0])
if len(string) != 1:
return conv(string[1:], t)
return t
(लगभग) अंतिम समाधान यहाँ कोशिश की जा सकती है!
ब्रेनफ की व्याख्या * ck दुभाषिया
पहले कार्यक्रम को भागों में अलग करते हैं:
Q~B"><ht.,".:=B;Z]1=L; - The initialisation part
Q~B"><ht.,".: - input.replace("><+-.,[]", "><ht.,")
- replace the characters in brainf*ck with some modified ones.
- this means we can `eval` the add and subtract bits easily.
=B; - set `B` to this.
- The `B` variable contains the instructions
Z]1=L; - set `L` to [0]
- `L` contains the stack, initialised with 0
उन्होंने कहा कि इस तरह की घटनाओं को रोकने के लिए सरकार की ओर से कोई ठोस कदम नहीं उठाया गया है।
W~Bo@D=c !code! ~o~BlN - The main loop
W - do
~Bo@D=c - c=B[o++]
- the c variable is used to store the current character.
~o~BlN - while
~o - o
N - ^ != V
~Bl - len(B)
- this stops the program running once it's finished.
- अनुदेश
- बढ़ते क्रम में / घटते क्रम में:
+-
उन्होंने कहा कि इस तरह की घटनाओं को रोकने के लिए सरकार की ओर से कोई ठोस कदम नहीं उठाया गया है।
"ht"{I~c~LZ@EZ]1~LR3:=L) - The bit that does incrementing and decrementing
"ht"{I ) - if c in "ht"
~LZ@ - L[Z]
- `Z` contains the current stack pointer
~c E - eval current character with ^ as an argument
- returns the contents of `Z` either incremented or decremented
Z]1~LR3:=L - L[Z] = ^
उन्होंने कहा कि इस तरह की घटनाओं को रोकने के लिए सरकार की ओर से कोई ठोस कदम नहीं उठाया गया है।
~c\,qIz.oZ]1~LR3:=L) - The code for output
~c\,qI ) - if character == ",":
z.o - ord(input)
Z]1~LR3:=L - L[Z] = ^
उन्होंने कहा कि इस तरह की घटनाओं को रोकने के लिए सरकार की ओर से कोई ठोस कदम नहीं उठाया गया है।
~c\.qI~LZ@.CpK) - The code for input
~c\.qI ) - if c == ".":
~LZ@ - L[Z]
.C - chr(^)
pK - print(^)
उन्होंने कहा कि इस तरह की घटनाओं को रोकने के लिए सरकार की ओर से कोई ठोस कदम नहीं उठाया गया है।
~c"<>"{I~c"<>""th".:ZE=Z - main part
~c"<>"{I - if "<>" in c:
~c"<>""th".: - c.replace("<>", "th")
ZE=Z - Z = eval(char, Z)
Z1_qI0=Z~L0"":0]10:=L) - lower bound check
Z1_qI ) - if Z == -1:
0=Z - Z = 0
~L0"": - L.insert("", 0)
0]10:=L - L[0] = 0
Z~LlqI~L~Ll"":1_]10:=L) - upper bound check
Z~LlqI ) - if Z == len(L):
~Ll"": - L.insert("", len(L))
~L 1_]10:=L - L[-1] = 0
उन्होंने कहा कि इस तरह की घटनाओं को रोकने के लिए सरकार की ओर से कोई ठोस कदम नहीं उठाया गया है।
~c\[qI~LZ@0qI\]~B~o>@~o+h=o)) - Code for `[`
~c\[qI ) - if c == "[":
~LZ@0qI ) - if L[Z] == 0:
~B~o> - B[o:]
\] @ - ^.find("]")
~o+h=o - o = o + ^ + 1
- तथा ]
:
उन्होंने कहा कि इस तरह की घटनाओं को रोकने के लिए सरकार की ओर से कोई ठोस कदम नहीं उठाया गया है।
~c\]qI~o\[~B~o<_@-t=o) - Code for `]`
~c\]qI ) - if c == "]":
~B~o<_ - reversed(B[:o])
\[ @ - ^.find("[")
~o -t=o - o = o - ^ -1