পাইকে, 5 টি অক্ষর
0h.CE
এটি একটি স্ট্রিনে রূপান্তরিত করে এবং তারপরে পাইকে কোড হিসাবে মূল্যায়ন করতে অসীম সংখ্যক উত্পাদন করতে সক্ষম।
কোডের ব্যাখ্যা:
0
- স্ট্যাক 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
- পাইক কোড হিসাবে একটি স্ট্রিং মূল্যায়ন করুন। এটি পাইক কোডের মতো একই পরিবেশটি ইতিমধ্যে চলছে তাই ইনপুটটির মতো জিনিসগুলি ভাগ করে দেবে।
পাইক টিউরিং সম্পূর্ণ At
কোনও ভাষা সম্পূর্ণরূপে দেখানো সহজ উপায়গুলির মধ্যে একটি হ'ল এতে ব্রেনফ * সি কে প্রয়োগ করা। এটি অন্য অনেক ভাষার তুলনায় পাইকের ক্ষেত্রে সম্ভবত আরও শক্ত কারণ এটির তালিকা এবং অভিধান ক্রিয়াকলাপগুলি পাইকের যে অংশে চালানোর জন্য ডিজাইন করা হয়েছে তাতে সেগুলির প্রয়োজনের অভাবের কারণে বেশ অস্তিত্বহীন: কোড-গল্ফ ।
প্রথমত আমরা ব্রেইনফ * সি কে এর জন্য একটি দোভাষী তৈরি করি এবং একটি নম্বর তৈরি করতে উপরের আমাদের অ্যালগরিদম ব্যবহার করে এটি এনকোড করি এবং তারপরে সেই সংখ্যাটি 0
এবং এর সাথে প্রকাশ করি h
। তারপরে আমরা কোডটি যুক্ত স্ট্রিংটি ঠিক একইভাবে চালানোর জন্য তৈরি করি। আমরা যদি এটি ছেড়ে চলে যাই তবে আমাদের কাছে স্ট্যাকটি থাকবে
string containing brainf*ck code
string containing brainf*ck interpreter
এর অর্থ পাইক স্ট্যাকটি সর্বশেষে শেষ হওয়ার কারণে কোডটি বিপরীত আকারে থাকতে হবে।
এখন মজাদার অংশের জন্য: মস্তিষ্কের * সি কে ইন্টারপ্রেটার একটি তীব্র 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
(প্রায়) চূড়ান্ত সমাধান এখানে চেষ্টা করা যেতে পারে !
ব্রেইনফ * সি কে ইন্টারপ্রেটারের ব্যাখ্যা
প্রথমে প্রোগ্রামটি অংশগুলিতে আলাদা করতে দিন:
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