Tantangan:
Diberi matriks (atau array 2d) 0s dan 1s, output jumlah langkah yang diperlukan untuk permainan Conway untuk mencapai kondisi stabil, atau -1 jika tidak pernah mencapai satu. Keadaan stabil adalah keadaan di mana tidak ada sel yang dinyalakan atau dimatikan setiap langkah. Gim harus berjalan dalam matriks yang diberikan, dengan bagian atas dan bawah terhubung, dan sisi-sisinya terhubung. (Yaitu diberi matriks 4x3 itu harus dijalankan pada torus 4x3) Matriks input tidak akan lebih besar dari 15x15.
Catatan: Jika matriks dimulai dalam keadaan stabil, output harus 0.
Sampel:
Memasukkan:
[[0,0,0],
[0,1,1],
[0,1,0]]
Keluaran:
2
Proses: (ini tidak perlu ditampilkan)
[[0,0,0],
[0,1,1],
[0,1,0]]
[[1,1,1],
[1,1,1],
[1,1,1]]
[[0,0,0],
[0,0,0],
[0,0,0]]
Memasukkan:
[[0,0,1,1],
[0,1,1,1],
[0,1,0,0],
[0,1,1,1]]
Keluaran:
2
Proses:
[[0,0,1,1],
[0,1,1,1],
[0,1,0,0],
[0,1,1,1]]
[[0,0,0,0],
[0,1,0,1],
[0,0,0,0],
[0,1,0,1]]
[[0,0,0,0],
[0,0,0,0],
[0,0,0,0],
[0,0,0,0]]
Memasukkan:
[[0,1,0,0],
[0,1,0,0],
[0,1,0,0],
[0,0,0,0]]
Keluaran:
-1
Proses:
[[0,1,0,0],
[0,1,0,0],
[0,1,0,0],
[0,0,0,0]]
[[0,0,0,0],
[1,1,1,0],
[0,0,0,0],
[0,0,0,0]]
[[0,1,0,0],
[0,1,0,0],
[0,1,0,0],
[0,0,0,0]]
terulang selamanya
Memasukkan:
[[0,0,0,0],
[0,0,0,1],
[0,1,1,1],
[0,0,1,0]]
Keluaran:
4
Proses:
[[0,0,0,0],
[0,0,0,1],
[0,1,1,1],
[0,0,1,0]]
[[0,0,0,0],
[1,0,0,1],
[1,1,0,1],
[0,1,1,1]]
[[0,1,0,0],
[0,1,1,1],
[0,0,0,0],
[0,1,0,1]]
[[0,1,0,1],
[1,1,1,0],
[0,1,0,1],
[1,0,1,0]]
[[0,0,0,0],
[0,0,0,0],
[0,0,0,0],
[0,0,0,0]]
Memasukkan:
[[0,0,0,0],
[0,1,1,0],
[0,1,1,0],
[0,0,0,0]]
Keluaran:
0
Proses:
Keadaan awal stabil.
Aturan Game of Life
Jika sel yang mati (0) tepat di sebelah tepat tiga pada (1) sel, itu dihidupkan. Kalau tidak, itu akan ditinggalkan. Jika sel yang aktif di sebelah 2 atau 3 pada kotak, ia mengatakan. Kalau tidak, dimatikan.
Jawaban:
Mathematica,
130129 byteSaya tidak akan merekomendasikan mencoba lebih dari input 4x4, karena itu akan memakan waktu lama (dan banyak memori).
Penjelasan
Ini hanya mensimulasikan Game of Life untuk 2 N langkah di mana N adalah jumlah sel dalam input. Ini menjamin bahwa jika sistem menetap ke kondisi stabil, kami telah mencapainya. Setelah itu, kami menemukan pasangan pertama dari status identik berturut-turut dalam sejarah simulasi.
Mari kita lihat kodenya:
Ini menghitung 2 N , karena
Join@@
digunakan untuk meratakan daftar 2D.Ini mensimulasikan Game of Life untuk generasi 2 N. Matriks 3x3 menentukan lingkungan dari otomat 2D totalistik dan
224
merupakan nomor aturan dari Game of Life standar. Saya telah menulis tentang bagaimana menghitung angka ini di sini di Mathematica.SE .Ini menghasilkan semua pasangan generasi secara berurutan (tumpang tindih).
Ini menemukan pasangan generasi pertama yang identik, default ke
0
jika tidak ada yang ditemukan dan membatasi pencarian ke kedalaman1
. Jika pasangan seperti ini ditemukan, hasilnya dikembalikan dalam daftar meskipun. Jadi kami menggunakan:Untuk mengekstrak elemen pertama dari daftar itu (nilai default
0
, menjadi atom, tidak terpengaruh oleh ini).Akhirnya kami mengurangi satu karena tantangan mengharapkan
0
indeks berbasis dan-1
untuk kegagalan.sumber
Lua,
531509488487464424405404 BytesSiapa yang mau pengajuan besar-besaran? \Hai/
Sunting: Memperbaikinya, tetapi tidak tahu cara bermain golf lagi, jadi ...
penjelasannya akanditambahkan komentar :)Disimpan ~ 60 byte dengan bantuan @ KennyLau
golf kecil memotong satu byte lagi dengan mengubah nama
a
menjadiY
untuk mencegah konversi heksadesimal yang digariskanTidak disatukan
Uji kasus
Ini beberapa test case
sumber
Jelly,
2625 byteCobalah online! atau verifikasi semua kasus uji .
Kasing uji yang lebih besar (dari jawaban @ Katenkyo ): 15 × 15 stable | 15 × 14 peluncur
Bagaimana itu bekerja
sumber
Perl,
154151144140137133129 byteTermasuk +3 untuk
-ap0
Jalankan dengan input sebagai garis kelompok digit yang dipisahkan oleh spasi
Ini hanya benar-benar diperlukan jika input langsung stabil. Dalam semua kasus lain, Anda juga dapat dengan mudah memberikannya sebagai garis digit terpisah:
Namun, memberikan input dengan cara ini akan memberikan 1 bukannya 0 untuk konfigurasi yang stabil segera.
life.pl
:Hampir mengalahkan Mathematica yang satu ini ...
Hanya pada versi perl yang lebih lama (di mana Anda dapat menggunakan konstanta sebagai variabel) apakah solusi 126 byte ini berfungsi:
Seandainya ada setidaknya 2 baris solusi 123 byte ini bekerja pada semua versi perl:
sumber
ruby, 207 byte
Saya menyimpan sejarah setiap papan, jadi jika saya mendapatkan papan yang pernah saya lihat sebelumnya, saya tahu satu dari dua hal terjadi. pertama bisa jadi kita telah menemukan posisi yang stabil, dalam hal ini akan menjadi yang paling membenci dalam sejarah kita. kemungkinan lainnya adalah kita memiliki satu loop.
sumber
15*15*4*1000
-> 900 KB, cukup baik untuk kasus-kasus di mana kita membutuhkan 10k + gens :).Julia,
9288 byteVerifikasi
sumber