Ada virus di dalam penerima 5x5. Seperti yang kita ketahui bagaimana ia menyebarkan kontaminasi, misi Anda adalah menghasilkan tahap terakhir kontaminasi.
Penerima
Ini akan direpresentasikan sebagai array dua dimensi 5x5:
0 0 0 0 1
0 0 0 0 1
0 0 0 1 1
0 0 1 1 1
0 1 1 1 1
Dimana 1
artinya posisi di mana virus sudah terkontaminasi, dan 0
posisi tidak terkontaminasi.
Bagaimana virus menyebar
- Posisi yang terkontaminasi tidak dapat dibersihkan.
- Posisi bersih akan terkontaminasi pada tahap berikutnya hanya jika setidaknya dua posisi yang berdekatan (sel utara, timur, selatan dan barat) terkontaminasi.
- Tahap terakhir dari kontaminasi terjadi ketika tidak ada lagi sel yang bersih yang dapat terkontaminasi.
Sampel
Menggunakan sebagai tahap 1 dari kontaminasi penerima yang dijelaskan di atas, tahap 2 akan:
0 0 0 0 1
0 0 0 1 1
0 0 1 1 1
0 1 1 1 1
0 1 1 1 1
Tahap 3 dari kontaminasi adalah:
0 0 0 1 1
0 0 1 1 1
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1
Tahap 4 dari kontaminasi adalah:
0 0 1 1 1
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1
Dan tahap 5 (dalam contoh ini, yang terakhir) adalah:
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1
Tantangan
Diberikan sebagai input satu tahap kontaminasi, Anda harus menampilkan tahap terakhir kontaminasi.
Anda diperbolehkan menulis program atau fungsi lengkap. Anda dapat mengambil input sebagai array / daftar, sebagai angka yang dipisahkan, atau bahkan sebagai string. Pilih cara terbaik yang sesuai dengan bahasa Anda.
Jawaban terpendek dalam byte menang!
Kasus uji lain
Input:
1 1 0 0 1
0 0 0 0 0
0 1 0 0 1
0 0 0 0 0
1 0 0 0 1
Output:
1 1 0 0 1
1 1 0 0 1
1 1 0 0 1
1 1 0 0 1
1 1 0 0 1
Input:
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1
Output:
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
Input:
1 0 0 1 0
0 0 1 0 1
0 0 0 0 0
1 0 0 0 0
0 0 1 0 0
Output:
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
Input:
0 1 0 0 0
0 0 0 0 1
0 0 1 0 0
1 0 0 0 0
0 0 0 1 0
Output:
0 1 0 0 0
0 0 0 0 1
0 0 1 0 0
1 0 0 0 0
0 0 0 1 0
sumber
1 0 1
terjadi pada output? Bukankah pusat nol bersebelahan dengan dua1
s?1 0 0 1 0 \ 0 0 1 0 1 \ 0 0 0 0 0 \ 1 0 0 0 0 \ 0 0 1 0 0
sebagai test case?0 1 0 0 0 \ 0 0 0 0 1 \ 0 0 1 0 0 \ 1 0 0 0 0 \ 0 0 0 1 0
, yang tetap tidak berubah.Jawaban:
Karena ini pada dasarnya berbicara tentang otomat seluler saya berikan kepada Anda ..
Aturan Quicklife Golly , 10 byte
Masukkan aturan, rekatkan kisi ke dalam Golly, jalankan pola. Pola yang dihasilkan adalah output.
Penjelasan:
Atau jika Anda bersikeras aturan RuleLoader penuh, 89 byte:
Rulename adalah X, langkah yang sama seperti sebelumnya.
sumber
B3/S23
yang dapat melakukan apa saja! ... Tetapi memang memiliki format input yang ketat (seperti seluruh program dimasukkan dalam input (bagaimana lagi yang akan Anda lakukan?)). TAPI MENGAPA MERENUNGKAN KEGAGALAN ??Python 2, 97 byte
Cobalah online . Input diambil sebagai string yang dikutip dengan setiap baris dibatasi oleh baris baru. Tidak
980
optimal dan dapat diganti dengan kelipatan lebih rendah dari 35. Karena tidak berdampak pada panjangnya program ini, saya telah meninggalkan penentuan batas atas aman terendah sebagai latihan untuk pembaca.sumber
Javascript (ES6),
918987 byteSebagai fungsi yang menerima input sebagai array angka atau string.
-2 byte dari Neil (menggabungkan penugasan
y
dengan konversi string)-2 byte (menghapus variabel
j
)sumber
(y=...)+''==x
alih-alih(y=...),y+''==x
.MATL , 22 byte
Ini berfungsi dalam versi bahasa saat ini (15.0.0) .
Cobalah online !
Format input adalah: array 2D dengan baris yang dipisahkan oleh titik koma. Jadi empat kasus uji memiliki input berikut:
Penjelasan
Ini berulang kali melakukan konvolusi 2D dari array input dengan mask berikut, yang mendefinisikan tetangga yang dianggap terkontaminasi:
Untuk mendapatkan hasil ukuran yang sama dengan array asli, pertama-tama diisi dengan bingkai nol dan kemudian hanya bagian konvolusi "valid" disimpan (yaitu yang tanpa efek tepi).
Ambang batas 2 diterapkan pada output konvolusi, dan hasilnya adalah elemen ORed dengan input asli.
Ini harus dilakukan dalam jumlah yang cukup untuk memastikan keadaan akhir telah tercapai. Kriteria sederhana yang memenuhi ini adalah: iterate sebanyak jumlah entri dalam array input (yaitu, 25 kali dalam kasus uji).
sumber
TI-BASIC, 151 byte
Masukkan sebagai
[[1,0,0,1,1][1,0,0,0,0]...]
.sumber
Repeat
lingkaran.Lua, 236 byte
Menerima input pada baris perintah, dan menggunakan manipulasi string Lua untuk mendapatkan jawabannya.
Tidak Disatukan:
sumber
APL,
767270 byteApa yang dilakukan adalah: perluas matriks menjadi 7x7, kemudian pusatkan argumen kami (omega). Dari matriks ini, buat 4 matriks "anak", masing-masing bergeser ke arah yang berbeda (atas / bawah / kiri / kanan), tambahkan bersama-sama (jadi kami mendapatkan jumlah tetangga), jatuhkan bingkai (untuk kembali ke 5x5 matrix). Atau matriks baru ini dengan yang "lama", untuk memastikan kami tidak menjatuhkan sel apa pun dalam proses (yaitu di tepi). Kemudian, gunakan
⍣≡
kombinasi untuk mendapatkan nilai titik tetap.contoh (mengingat fungsi ditugaskan untuk
contaminate
):sumber