Karena besok adalah tanggal 4 Mei, di sini ada posting bertema Star Wars kecil untuk mempersiapkan Anda secara mental terhadap semua lelucon buruk yang akan terjadi besok.
BACKSTORY
Selama sesi senat galaksi semua senator duduk di n*n
kotak. Tiba-tiba wabah flu JarJar (yang berlangsung selamanya dan menyebabkan orang yang terinfeksi berbicara seperti JarJar Binks) menyebabkan beberapa senator terinfeksi.
Berikut ini contoh dengan 6*6
kisi di mana X
senator yang terinfeksi, daftar terkait adalah [[0,5],[1,4],[2,3],[2,1],[3,3],[3,0],[4,5],[0,5]]
::
Setelah itu infeksi mulai menyebar langkah demi langkah. Dua senator berbatasan jika mereka berbagi seluruh tepi pada kisi (yaitu, atas, bawah, kanan, kiri), yang berarti kita mengecualikan diagonal.
Kami dapat menyimpulkan bahwa seorang senator dapat bersebelahan dengan 2,3 atau 4 senator lainnya dan mengklaim aturan infeksi berikut:
- Seorang senator yang telah terinfeksi tetap terinfeksi selamanya
- Seorang senator terinfeksi pada suatu langkah jika ia berdekatan dengan 2 atau lebih senator yang terinfeksi pada langkah sebelumnya
Berikut ini contoh dengan kisi sebelumnya yang menunjukkan 2 langkah pertama infeksi:
Setelah langkah selanjutnya semua senat akan terinfeksi
TUGAS ANDA
Kode Anda tidak perlu menangani input yang tidak valid seperti daftar yang lebih besar dari n*n
atau koordinat yang tidak berbeda.
Kode Anda akan dimasukkan sebagai input daftar pasangan bilangan bulat (atau kisi biner atau format lain yang sesuai dengan bahasa Anda) dan bilangan bulat n
(yang tidak perlu jika Anda menggunakan format lain selain daftar), misalnya:
8 [[1,2],[1,1],[7,4],[2,7],[4,3]]
n menjadi sisi dari kisi yang berarti kisi akan menjadi kisi * n, dan daftar pasangan bilangan bulat menjadi koordinat sel-sel dari senator yang terinfeksi secara resmi.
Kiri bawah grid adalah [0,0] dan kanan atas adalah [n-1, n-1]. Kiri atas adalah [0, n-1].
Kode Anda harus menampilkan bilangan bulat:
-1
atau nilai palsu atau kesalahan jika seluruh jaringan tidak akan pernah sepenuhnya terinfeksi atau jumlah langkah minimum yang diperlukan untuk menginfeksi seluruh jaringan
Uji kasus
6 [[0,5],[1,4],[2,3],[2,1],[3,3],[3,0],[4,5],[5,0]] => 7
4 [[1,1][0,3][1,0][3,0][3,3]] => 9
Ingat bahwa ini adalah kode-golf , sehingga jawaban terpendek dalam byte menang!
n
? Apakah ada nilai maksimal?CellularAutomaton
...Jawaban:
MATL,
2928 byteInput dalam bentuk matriks 2D dari 1 dan 0
Cobalah di MATL Online
Penjelasan
sumber
tn:"tlY6Z+1>Z|t?x@D.]]N?xl_
? (Saya belum banyak diuji). Jika semua elemen adalah 1 di beberapa titik, segera tampilkan indeks loop dan hapus tumpukan. Di akhir perulangan, jika stack tidak kosong, hapus dan tekan-1
APL (Dyalog 16.0), 54 karakter atau 60 byte
Membawa matriks terlampir sebagai argumen, mengembalikan nomor langkah yang menyelesaikan infeksi, yaitu 1 = sudah sepenuhnya terinfeksi. 0 = tidak sepenuhnya menyebar, yang hanya 1 + angka OP.
54 karakter (Unicode):
60 byte (Klasik):
⌺
setara dengan⎕U233A
Contoh menjalankan:
Langkah-langkahnya adalah sebagai berikut:
sumber
Pyth , 49 byte
Suite uji .
Menggunakan pengindeksan 1 untuk output.
sumber
Python, 231 byte
Ini memunculkan kesalahan jika tidak mungkin.
Cobalah online!
sumber
0/0
menyimpan dua byte dariraise
. Mungkin1/(g!=h)
akan bekerja (maka keseluruhanwhile
bisa diuraikan juga).q=lambda r,c:g[r][c]if(0<=r<m)*(0<=c<m)else 0
menghemat 12. Anda dapat menghapus ruang antara (a)1
danfor
dan (b)]
danfor
juga.JavaScript (ES6), 132 byte
Dimana
\n
mewakili karakter baris baru literal. Mengambil input sebagai string0
s dan1
s dalam array yang dibatasi baris baru. KembaliNaN
jika grid tidak akan sepenuhnya terinfeksi.sumber