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 1
diikuti oleh 2
nilai-nilai lain itu akan menambahkan 0
ke hasil dan melanjutkan membaca. Jika bertemu dengan 0
(atau ada kurang dari 3 nilai yang tersisa) itu akan menambahkan nilai saat ini dan a 1
dan melanjutkan membaca. Pada akhir string itu akan menambahkan satu 1
ke hasil.
Berikut adalah contoh satu generasi yang berhasil
01011111
^
Kami pertama kali bertemu 0
sehingga kami menambahkan 01
ke hasil kami
01011111
^
01
Sekarang kita temui a 1
sehingga kami menambahkan nol dan melewatkan dua nilai berikutnya
01011111
^
010
Kami bertemu orang lain 1
sehingga kami melakukan hal yang sama
01011111
^
0100
Kami sekarang memiliki ruang lain 1
tetapi 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 1
dan 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)
sumber
10
harus cetak11011
? Saya pikir beberapa kasus uji lagi akan membantuJawaban:
V ,
262221 byteBerkat @CowsQuack selama 4 byte dengan menggabungkan regex! Dan @ ØrjanJohansen untuk byte lain dengan beberapa kombinasi regex.
Cobalah online!
Gunakan pengganti beberapa kali dan tambahkan 1 di bagian akhir. Tidak ada yang terlalu mewah. Saya memiliki versi yang memetakan kembali
1
dan0
dalam mode penyisipan untuk mendapatkan efek yang diinginkan, tetapi ini sedikit lebih lama.(Versi pengganti banyak: Coba online! )
sumber
Ó1ü0/&1
ü
\|
Ó./&1
diikutiÓ31/0
.JavaScript (ES6), 56 byte
Mengambil input sebagai array karakter. Mengembalikan string, atau nomor
1
jika diberi array kosong.Demo
Tampilkan cuplikan kode
Versi animasi
Contoh input stabil: 0101, 010011111
Tampilkan cuplikan kode
sumber
Python 2 , 88 byte
Cobalah online!
sumber
Python 2 , 89 byte
Cobalah online!
-4 byte terima kasih kepada Rod
-6 byte terima kasih kepada ovs
-1 byte terima kasih kepada micsthepick
sumber
[0]if v else[x[y],1]
dapat ditulis ulang sebagai[[x[y],1],[0]][v]
, tetapi Anda dapat membalikkanv
nilai untuk mencapai 96 byteSwift 3 , 147 byte
-1 berkat @ Mr.Xcoder
Tidak digabungkan, mengembalikan nilai alih-alih mencetak:
sumber
3<=s.count
dengan2<s.count
untuk -1 byte .1
input dengan0 < element
daripadaelement == 0
Python 2 , 81 byte
Baik input dan output adalah daftar (terima kasih kepada Erik the Outgolfer)
Cobalah online!
Beberapa kasus
Python 2 , 85 byte
Baik input maupun output adalah string (solusi awal)
Cobalah online!
Beberapa kasus
Penjelasan Ini sederhana golf dari metode rekursif.
sumber
1>Z[0]
bukan0==Z[0]
.Perl 5 , 62 + 2 (
-F
) = 64 byteCobalah online!
sumber
Scala , 131 + 29 = 160 byte
Ini di dalam fungsi mengambil string
a
sebagai parameter dan mengembalikan output sebagai string.Saya harus melakukannya
import util.control.Breaks._
, jadi saya perlu menambahkan 28 byte tersebut ditambah linefeed tambahan.Cobalah online!
sumber
C # (.NET Core) , 108 byte
Cobalah online!
Input diambil sebagai string, dan string dikembalikan sebagai output.
sumber