Otomat seluler yang menyerupai kehidupan adalah otomat seluler yang mirip dengan Conway's Game of Life, di mana mereka beroperasi pada kotak persegi (secara teoritis) tak terhingga besar, di mana setiap sel memiliki 8 tetangga yang tepat, dan merupakan salah satu dari 2 negara, yaitu hidup dan mati .
Namun, versi suka-suka ini berbeda dalam cara yang krusial: aturan untuk sel yang diberikan menjadi hidup dan aturan untuk sel yang diberikan untuk bertahan hidup ke generasi berikutnya.
Sebagai contoh, Game of Life klasik menggunakan aturan B3/S23
, yang berarti bahwa dibutuhkan 3 sel hidup untuk melahirkan yang baru, dan 2 atau 3 tetangga yang hidup untuk bertahan hidup. Untuk tantangan ini, kami akan berasumsi bahwa tetangga tidak memasukkan dirinya sendiri, sehingga setiap sel memiliki 8 tetangga.
Tugas Anda adalah, diberikan konfigurasi awal, aturan kelahiran, aturan bertahan hidup dan bilangan bulat positif (jumlah generasi yang akan dijalankan), mensimulasikan robot mirip-kehidupan menggunakan aturan-aturan itu untuk jumlah generasi yang diberikan dalam kode sesingkat mungkin . Konfigurasi awal akan berupa matriks kuadrat / array 2 dimensi atau string multiline, Anda dapat memilih. Yang lain dapat diberikan dalam format dan metode apa pun yang masuk akal.
Misalnya, jika aturan kelahiran adalah 12345678
(tetangga yang hidup), aturan survival adalah 2357
dan konfigurasi awal adalah
0 0 0 0 0
0 0 0 0 0
0 0 1 0 0
0 0 0 0 0
0 0 0 0 0
dua generasi berikutnya akan menjadi
Generation 1: Generation 2:
0 0 0 0 0 1 1 1 1 1
0 1 1 1 0 1 1 0 1 1
0 1 0 1 0 1 0 1 0 1
0 1 1 1 0 1 1 0 1 1
0 0 0 0 0 1 1 1 1 1
Jika jumlah generasi yang diberikan adalah 10, output akan menjadi sesuatu di sepanjang garis
0 1 1 1 0
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
0 1 1 1 0
Anda tidak harus menangani perubahan yang terjadi di luar batas yang diberikan oleh matriks input, namun, semua sel di luar matriks mulai mati. Oleh karena itu, matriks input dapat berukuran berapa saja, hingga nilai maksimum yang dapat didukung bahasa Anda. Anda tidak harus mengeluarkan papan antara generasi.
Ini adalah kode-golf sehingga kode terpendek menang.
Uji kasus
Ini menggunakan B/S
notasi untuk menunjukkan aturan yang digunakan
B2/S2
,, generations = 100
konfigurasi:
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
Keluaran:
0 0 0 0 0 0 0 0
0 1 0 0 0 0 1 0
1 0 0 0 0 0 0 1
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
B1357/S2468
,, generations = 12
konfigurasi:
1 0 1 0 1 0
0 1 1 0 1 0
1 0 0 0 0 0
0 0 0 0 0 1
1 1 1 1 1 0
0 1 1 0 0 1
Keluaran:
0 1 0 0 0 0
0 1 1 1 1 0
0 1 0 1 1 0
1 1 1 0 0 0
0 0 1 1 1 0
0 1 1 0 0 0
Jika Anda perlu membuat lebih banyak kasus uji, Anda dapat menggunakan simulator yang luar biasa ini . Pastikan untuk membatasi ukuran papan
sumber
Jawaban:
MATL ,
2423 byteInputnya adalah:
;
sebagai pemisah baris.Cobalah online! Atau lihat test case: 1 , 2 .
Untuk beberapa byte lagi, Anda dapat melihat evolusi dalam seni ASCII .
Penjelasan
sumber
xx
pada awal tampaknya boros sedikit dengan saya ...Bahasa Wolfram (Mathematica) ,
144122 byteCobalah online!
Contoh penggunaan:
menggunakan grid acak 10x10 sebagai permulaan, bertahan dengan 2 atau 3 tetangga, kelahiran dengan 3 tetangga, hasil plot pada 5 iterasi.
sumber
R , 256 byte
Cobalah online!
Sayangnya, ini tidak terlihat seperti golf seperti yang saya harapkan.
Input : matriks R, dan parameter tantangan. Output : matriks setelah generasi R.
Algoritma ini melapisi matriks dengan angka nol untuk menangani batas. Kemudian, berulang: 1) ini menerapkan aturan Kelahiran dan 2) itu membunuh sel-sel yang sudah ada sebelumnya yang tidak melewati aturan Survival. Padding dihapus saat kembali.
sumber
216
yang setidaknya merupakan kubus ...Python 2 ,
156149146 byteCobalah online!
Mengambil input:
R
ules:[birth,survial]
aturan sebagai daftarstring
. mis. (['135','246']
)g
enerations:int
c
onfigurasi: Array 2D persegi1/0
atauTrue/False
Mengembalikan array 2d dari
True/False
sumber