Saya bermain-main dengan automaton seluler dan saya menemukan satu yang memiliki perilaku menarik. Begini cara kerjanya:
Bunyinya string biner dari kiri ke kanan, jika menjumpai 1diikuti oleh 2nilai-nilai lain itu akan menambahkan 0ke hasil dan melanjutkan membaca. Jika bertemu dengan 0(atau ada kurang dari 3 nilai yang tersisa) itu akan menambahkan nilai saat ini dan a 1dan melanjutkan membaca. Pada akhir string itu akan menambahkan satu 1ke hasil.
Berikut adalah contoh satu generasi yang berhasil
01011111
^
Kami pertama kali bertemu 0sehingga kami menambahkan 01ke hasil kami
01011111
^
01
Sekarang kita temui a 1sehingga kami menambahkan nol dan melewatkan dua nilai berikutnya
01011111
^
010
Kami bertemu orang lain 1sehingga kami melakukan hal yang sama
01011111
^
0100
Kami sekarang memiliki ruang lain 1tetapi tidak cukup untuk melompat sehingga kami menambahkan sel saat ini dan 1(dalam hal ini 11)
01011111
^
010011
Kami berada di akhir jadi kami menambahkan satu 1dan mengakhiri generasi ini
01011111
^
0100111
Tugas
Masukan yang diberikan dalam format apa pun yang masuk akal Anda harus membuat fungsi atau program yang menghitung satu generasi automaton.
Ini adalah pertanyaan kode-golf sehingga jawaban akan dinilai dalam byte, dengan lebih sedikit byte yang lebih baik.
Implementasi sampel
Berikut ini adalah contoh implementasi di Haskell (mendefinisikan suatu fungsi d, tetapi program mencetak iterasi tanpa batas waktu):
d('1':_:_:x) = "0" ++ d x
d(a:x) = a:'1':d x
d x = "1"
r x = x:map d(r x)
10harus cetak 11011? Saya pikir beberapa kasus uji lagi akan membantu