আমি সেলুলার অটোমেটনের সাথে চারপাশে খেলছিলাম এবং আমি একটি আকর্ষণীয় আচরণ পেয়েছিলাম। এখানে কিভাবে এটা কাজ করে:
এটা একটা বাইনারি স্ট্রিং সার্চ বাঁ দিক থেকে ডানদিকে, যদি 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? আমি মনে করি আরও কয়েকটি পরীক্ষার কেস সহায়ক হবে