>>>>>+>,[>++++++[-<-------->]<+>,]<[-[█<█<]++++++++++<]>[-]>>██[>█>>█>]+[<]<<[<]>█<<+>>[>]█>[>]█+[<]<<[<]>-█>]>>[->]<[-[[<]<]++++++++++<]>[-]>[<█]>]>[>]<[[█]<]<<<<<[<]<<██>>[>]<█[->+<]<█>>[>]<[-[[<]<]++++++++++<]>███>[<<]>[[[>]>████[<]<[-[[<]<]++++++++++<]>[-]>[█<]>]>[>]<[[-]>+[>]<-<[<]<]+<<<<<[<]>[[>]+[[>]>]>[>]>[-<+>]<[<]<[>+[<]>>-<<<<<[[<]<]>>███████>[[█]>]<]<[[<]<]<[█]>]>>>[[>]<->>]]>[[>]>]<<[[[█]<]<]<<<[█]<<█>>>[>]█[-[[<]<]++++++++++<]>>[[>]+[------->++<]>.+.+++++.[---->+<]>+++.>>]>[>]+[------->++<]>++.++.---------.++++.--------.
>>>>>+>,[>++++++[-<-------->]<+>,]<[-[[<]<]++++++++++<]>[-]>>[[[>]>>[>]+[<]<<[<]>[<<+>>[>]>>[>]<+[<]<<[<]>-]>]>>[->]<[-[[<]<]++++++++++<]>[-]>[<<]>]>[>]<[[-]<]<<<<<[<]<<[>>>[>]<[[->+<]<]>>[>]<[-[[<]<]++++++++++<]>[-]>[<<]>[[[>]>[>]+[<]<[-[[<]<]++++++++++<]>[-]>[<<]>]>[>]<[[-]>+[>]<-<[<]<]+<<<<<[<]>[[>]+[[>]>]>[>]>[-<+>]<[<]<[>+[<]>>-<<<<<[[<]<]>>[[-]+>]>[[>]>]<]<[[<]<]<[<]>]>>>[[>]<->>]]>[[>]>]<<[[[-]<]<]<<<[<]<<]>>>[>]<[-[[<]<]++++++++++<]>>[[>]+[------->++<]>.+.+++++.[---->+<]>+++.>>]>[>]+[------->++<]>++.++.---------.++++.--------.
এটি অনলাইন চেষ্টা করুন!
এটি ইরোটোথিনিসের চালনী প্রয়োগ করে।
প্রাথমিক >>>>>+>,[>++++++[-<-------->]<+>,]
অঙ্কটি প্রতিটি অঙ্ককে একটি অক্ষর কোড হিসাবে ইনপুট করে এবং 1-10-এর মধ্যে রাখতে 47 টি বিয়োগ করে। এটি 0 এর একটি সেল মান সংখ্যার মধ্যে ব্যবধান বোঝাতে দেয়। +>
এই বিভাগে বাহিনীর শুরুতে কাছাকাছি সংখ্যা অন্তত দুটি সংখ্যা, যা গুরুত্বপূর্ণ শীঘ্রই হবে যাবে।
এরপরে, এবং আমি প্রথম যে জিনিসগুলি আবিষ্কার করেছি তা হল বিভাগ <[-[[<]<]++++++++++<]>[-]>
। কোডে এটি বেশ কয়েকবার প্রকাশিত হয়েছে, প্রতিটি প্রত্যেকেই বিভিন্ন ধরণের রেডাকশন দিয়েছিলেন তবে অনুমান করা খুব কঠিন ছিল না যে এই সমস্ত উদাহরণগুলি সম্ভবত একই কোড ছিল। এই কোডটিতে টেপের দশমিক সংখ্যার বামে তিনটি শূন্য প্রয়োজন এবং এটির সংখ্যাটি হ্রাস করতে হবে। লুপের শেষ পুনরাবৃত্তিটি 10 টি বামের সংখ্যাটি বামে রেখে দেবে, তবে এটি [-]
পরিষ্কার করে।
দশমিক সংখ্যা যদি 0 হয় তবে কোনও বহিরাগত 10 তৈরি হয় না এবং ঘরটি শূন্যতম হয় [-]
সবচেয়ে উল্লেখযোগ্য অঙ্ক significant টেপ শিরোনামটি তখন দ্বিতীয় সর্বাধিক উল্লেখযোগ্য অঙ্কে থাকে (এজন্য কমপক্ষে দুটি সংখ্যাও প্রয়োজনীয়)। এই স্নিপেটের বেশিরভাগ উদাহরণ তত্ক্ষণাত্ অনুসরণ করা হয় [<<]>
, যা সাধারণ অবস্থায় ননজারো কোষে মাথা রাখে এবং মূল দশমিক সংখ্যা শূন্য হলে একটি শূন্য কোষ। দেখে মনে হচ্ছে এই প্রোগ্রামে দশমিক দশমিক প্রতিনিধিত্ব n-1
বোঝাতে ব্যবহৃত হয় n
, যাতে হ্রাসের 0
পরিবর্তে হ্রাস পেতে ধরা পড়ে -1
।
পরবর্তী অংশটি n-1 (n) থেকে 0 (1) এ টেপগুলিতে নম্বর রাখে:
>[ until the number reaches zero:
[ for each digit:
[>]>>[>]+[<]<<[<]> create a placeholder for the next copy
[ while the original value of the digit is nonzero:
<<+ add 1 to copy two cells left (to keep one copy)
>>[>]>>[>]<+ go to new copy and increment that cell
[<]<<[<]>- go back to original digit and decrement
] (this is effectively the same as [<+>>+<-] but with the cells at variable locations)
>] next digit
>>[->] cancel the placeholder 1s that were used for the new copy
<[-[[<]<]++++++++++<]>[-]>[<<]> decrement
]
>[>]<[[-]<] clean up the trash 10s on the tape while ending at a known location relative to the last number
এখন, এই সংখ্যাগুলি দুটি শূন্য কোষগুলি পৃথক করে টেপে রয়েছে। <<<<<[<]<<
টেপটিতে পেনাল্টিমেট সংখ্যার চূড়ান্ত কক্ষে আমাদের রাখে, যেখানে আমরা লুপের প্রতিটি পুনরাবৃত্তিতে থাকব। লুপটি সমাপ্ত হয় যখন মূল ব্যতীত সমস্ত সংখ্যা হ্যান্ডেল করা হয়।
লুপের শুরুতে, আমরা কমান্ড কমার জন্য ডানদিকে একটি ডানদিকে বর্তমান নম্বরটি (টেপটিতে এখনও একটি শেষ এখনও) সরিয়ে নিয়েছি এবং তারপরে এগিয়ে এবং হ্রাস:
[>>>[>]<[[->+<]<]>>[>]<[-[[<]<]++++++++++<]>[-]>[<<]>
যদি এই হ্রাসটি প্রবাহিত না হয়, তবে আমরা সংখ্যাটি আনারিতে রূপান্তর করতে এগিয়ে চলি:
[[[>]>[>]+[<]<[-[[<]<]++++++++++<]>[-]>[<<]>]
নোট করুন যে এই স্নিপডের একটি আবদ্ধ রয়েছে [
। ফলস্বরূপ, সংখ্যাটি 0 (1 প্রতিনিধিত্ব করে) হলে এই লুপের বাকি অংশটি এড়িয়ে যায়। আনারিতে রূপান্তরিত হওয়ার পরে, আমরা আমাদের সাথে বাম দিকে অ্যানারি উপস্থাপনাটি টেনে টানা দশক সরিয়ে ফেলেছি:
>[>]<[[-]>+[>]<-<[<]<]+
আমি এখনই এটি লেখার আগে পর্যন্ত লক্ষ্য করিনি, তবে +
এই স্নিপেটের শেষে একক 0 দ্বারা অ্যানারি উপস্থাপনা থেকে পৃথক করা হয়েছে It এটি আনারি উপস্থাপনার একটি অংশও রয়েছে: ক্রমটি 1011...11
0 টি মডেল কে উপস্থাপন করবে। নিম্নলিখিতটি একটি নতুন লুপ শুরু <<<<<[<]>
করে আমাদের সংখ্যার শুরুতে রাখে k+1
।
এখানে অভ্যন্তরীণ লুপটি সাথে সাথে টেবিলে প্রতিটি সংখ্যার সাথে "ডান" চিহ্নিত করে সাথে সাথে ডানদিকে, এবং কোন সংখ্যাটি বহুগুণ হয় তা নির্ধারণ করার জন্য অবিচ্ছিন্ন উপস্থাপনাটিকে একটি ঘড়ি হিসাবে ব্যবহার করে k
।
[
[>]+ mark the current decimal number
[[>]>] move to end of decimal part of tape
>[>] move to 0 in middle of unary "clock"
>[-<+>] move the following 1 to the left if possible
<[<]< if a 1 was moved this will bring us back to a zero before the start of this "clock";
otherwise the looped move command doesn't move us at all and we are at the final 1
[ if there was no gap (happens every kth iteration):
>+[<]>>- reset to original position
<<<<<[[<]<]>> go to number that was just marked
[[-]+>] replace digits with 0s (cell value 1)
>[[>]>]< go back to where we would be without this conditional
]
<[[<]<]<[<]> return to first unmarked number
]
এই [[-]+>]
বিভাগে আমি শেষ অংশটি বের করেছিলাম। তার আগে, আমি ধরে নিয়েছি প্রোগ্রামটি কেবলমাত্র ট্রায়াল বিভাগগুলি করছে, তবে ফলাফলটি কোথায় ব্যবহৃত হয়েছিল তা আমি দেখতে পেলাম না।
এই লুপটি প্রান্ত বাম সংখ্যাটির দুটি বাম প্রান্তটি শেষ করে, এবং >>>[[>]<->>]]
টেপটিতে চিহ্নিত চিহ্নিতকারীগুলিকে সরিয়ে দেয় এবং আমাদের আবার টেপের শেষে পৌঁছে দেয়। এরপরে >[[>]>]<<[[[-]<]<]
অযাচিত ঘড়িটি সরিয়ে দেয় বা, যদি এই পুরো বিভাগটি এড়িয়ে যায়, তবে অবশিষ্ট 10s। লুপটি তার প্রারম্ভিক অবস্থার সাথে সেট করা আছে <<<[<]<<]
।
এর পরে কেবল পড়ার পরে যে ইনপুট নম্বরটি কোনও বিন্দুতে 1 দ্বারা প্রতিস্থাপিত হয়েছিল:
>>>[>]<[-[[<]<]++++++++++<]>> do the check
[[>]+[------->++<]>.+.+++++.[---->+<]>+++.>>] conditionally print "not "
>[>]+[------->++<]>++.++.---------.++++.--------. unconditionally print "prime"
ভাগ্যক্রমে, আসল আউটপুট মোটেও redacted ছিল না।