ব্রেইনফাক, 39 33 32 31 বাইট
-[-[>]<--<--],[[>.<+]>+.--.+<,]
টেপটিতে 45 টি থাকা অ্যালগরিদমটি এসোলাংয়ের ব্রেনফাক ধ্রুবক থেকে নেওয়া ।
এই উত্তরটি ধরে নিয়েছে যে আউটপুট প্রোগ্রামের দোভাষীর মোড়ক রয়েছে, আবদ্ধ সেল রয়েছে; এবং সেই ,
বর্তমান কক্ষটি শূন্য করে (বোঝায় যে আউটপুট প্রোগ্রামটি ইনপুট ছাড়াই চালিত হয়)। এটি অনলাইন চেষ্টা করুন!
একটি (দীর্ঘতর) সমাধানের জন্য যা নিঃশর্ত কাজ করে, আমার অন্য উত্তরটি দেখুন ।
টেস্ট রান
ইনপুট জন্য Code Golf
, নিম্নলিখিত আউটপুট উত্পন্ন হয়।
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------.,-------------------------------------------------------------------------------------------------------------------------------------------------.,------------------------------------------------------------------------------------------------------------------------------------------------------------.,-----------------------------------------------------------------------------------------------------------------------------------------------------------.,--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------.,-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------.,-------------------------------------------------------------------------------------------------------------------------------------------------.,----------------------------------------------------------------------------------------------------------------------------------------------------.,----------------------------------------------------------------------------------------------------------------------------------------------------------.,
এটি অনলাইন চেষ্টা করুন!
কিভাবে এটা কাজ করে
আমরা টেপের ঘরে একটি পূর্ণসংখ্যা 45 (বর্ণের কোড -
) স্থাপন করে শুরু করি । নিম্নলিখিত কোডটি এটি অর্জন করে।
- Decrement cell 0, setting it to 255.
[ While the cell under the head in non-zero:
[>] Advance to the next zero cell.
<-- Decrement the cell to its left.
<-- Decrement the next cell to the left.
]
আমরা লুপটি প্রবেশ করার আগে, টেপটি দেখতে এমন দেখাচ্ছে।
v
000 000 255
এই তিনটি ঘর - -2 , -1 এবং 0 - কেবলমাত্র আমরা এই প্রোগ্রামটিতে ব্যবহার করব।
লুপের প্রতিটি পুনরাবৃত্তির প্রথমদিকে, ডানদিকে কোষটি হয়, তারপরে সেই ঘর এবং মাঝারি ঘরটি দু'বার হ্রাস করা হয়, নিম্নলিখিত অবস্থাটি রেখে।
v
000 254 252
পরবর্তী 126 পুনরাবৃত্তির মধ্যে, প্রাথমিক -
কক্ষটি মধ্যবর্তী কক্ষকে হ্রাস করে, [>]<
ডানদিকের কক্ষে লাফ দেয় এবং --<--
মাঝারি এবং ডান ঘরের হ্রাস পায়। ফলস্বরূপ, 3 টি মাঝারি ঘর (মডুলো 256 ) এবং 2 থেকে বিয়োগ করা হয় থেকে বিয়োগ করা হয় ডানদিকের ঘর থেকে বিয়োগ করা হয়।
যেহেতু 254 ÷ 3 (গেলিক ভাষার 256) = (254 + 256) ÷ 3 = 510 ÷ 3 = 170 এবং 252 ÷ 3 = 84 , ডানদিকে অবস্থিত সেল মধ্যম এক সামনে থেকে দূর করে zeroed হয়, নিম্নলিখিত রাষ্ট্র রেখে।
v
000 132 000
একইভাবে লুপের প্রথম পুনরাবৃত্তিতে, পরবর্তী পুনরাবৃত্তিটি এখন মাঝারি ঘর থেকে 3 এবং বামতম কোষ থেকে 2 বিয়োগ করে, মাথাটি বামতম কোষে রেখে।
v
254 129 000
পরবর্তী পুনরাবৃত্তিগুলি যেমন তাদের আগে 126 পুনরাবৃত্তির মতো, বামদিকের ঘর থেকে 3 এবং ডানদিকের ঘর থেকে 2 বিয়োগ করুন ।
যেহেতু 254 ÷ 3 (মোড 256) = 170 এবং 129 ÷ 2 (মোড 256) অপরিজ্ঞাত, তাই নিম্নলিখিত অবস্থাটি রেখে 170 বার এটি করা হয়।
v
000 045 000
মাথার নীচে কোষটি শূন্য; লুপ শেষ হয়।
এখন আমরা আউটপুট উত্পন্ন করতে প্রস্তুত।
, Read a character from STDIN and put it the leftmost cell.
[ While the leftmost cell is non-zero:
[ While the leftmost cell is non-zero:
>. Print the content of the middle cell ('-').
<- Increment the leftmost cell.
] If the leftmost cell held n, the above will print 256 - n minus signs
which, when executed, will put n in cell 0 of the output program.
> Increment the middle cell, setting it to 46 ('.').
. Print its content ('.').
-- Decrement the middle cell twice, setting it to 44 (',').
. Print its content (',').
When executed, since the output program receives no input, the above
will zero cell 0 of the output program.
+ Increment the second cell, setting it back to 45 ('-').
<, Go back to the leftmost cell and read another character from STDIN.
] Once EOF is reached, this will put 0 in the leftmost cell, ending the loop.