আমি সেলুলার অটোমেটনের সাথে চারপাশে খেলছিলাম এবং আমি একটি আকর্ষণীয় আচরণ পেয়েছিলাম। এখানে কিভাবে এটা কাজ করে:
এটা একটা বাইনারি স্ট্রিং সার্চ বাঁ দিক থেকে ডানদিকে, যদি encounters একটি 1
দ্বারা অনুসরণ 2
অন্যান্য মান এটি একটি সংযোজন হবে 0
ফলাফল এবং পড়া চালিয়ে যান। যদি এটির মুখোমুখি হয় 0
(বা 3 টিরও কম মান বাকি রয়েছে) তবে এটি বর্তমান মান এবং একটি সংযোজন করবে 1
এবং পড়া চালিয়ে যাবে। স্ট্রিংয়ের শেষে এটি ফলাফলটিতে একটি একক সংযোজন করবে 1
।
এখানে একটি প্রজন্মের একটি কাজের উদাহরণ's
01011111
^
আমরা প্রথমে একটি মুখোমুখি 0
হই যাতে আমরা 01
আমাদের ফলাফলের সাথে সংযোজন করি
01011111
^
01
এখন আমরা একটি মুখোমুখি হয়েছি 1
তাই আমরা একটি শূন্য সংযোজন করি এবং পরবর্তী দুটি মান ছেড়ে চলে যাই
01011111
^
010
আমরা অন্যটির মুখোমুখি 1
হই তাই আমরাও তাই করি
01011111
^
0100
আমাদের এখন আর একটি 1
তবে লাফ দেওয়ার মতো পর্যাপ্ত জায়গা নেই তাই আমরা বর্তমান কক্ষটি সংযুক্ত করি এবং একটি 1
(এই ক্ষেত্রে 11
)
01011111
^
010011
আমরা শেষে রয়েছি তাই আমরা একটি একক সংযোজন করি 1
এবং এই প্রজন্মকে সমাপ্ত করব
01011111
^
0100111
কার্য
যে কোনও যুক্তিসঙ্গত বিন্যাসে ইনপুট দেওয়া আপনার অবশ্যই একটি ফাংশন বা প্রোগ্রাম তৈরি করতে হবে যা অটোমেটনের একটি প্রজন্মকে গণনা করে।
এটি একটি কোড-গল্ফ প্রশ্ন তাই উত্তরগুলি বাইটে স্কোর করা হবে, কম বাইট আরও ভাল।
নমুনা বাস্তবায়ন
এখানে হাস্কেলের একটি নমুনা বাস্তবায়ন (একটি ফাংশন সংজ্ঞায়িত করে d
তবে প্রোগ্রামটি অনির্দিষ্টকালের জন্য একটি পুনরাবৃত্তি মুদ্রণ করে):
d('1':_:_:x) = "0" ++ d x
d(a:x) = a:'1':d x
d x = "1"
r x = x:map d(r x)
10
এটি একটি মুদ্রণ করা উচিত 11011
? আমি মনে করি আরও কয়েকটি পরীক্ষার কেস সহায়ক হবে