Sebelum saya mulai, tantangan ini bukan milik saya awalnya
Kredit ke The University of Waterloo. Ini berasal dari Kompetisi Komputasi Kanada 2016, Masalah Senior 5. Ini adalah tautan yang dapat diklik untuk kontes PDF:
http://cemc.uwaterloo.ca/contests/computing/2016/stage%201/seniorEn.pdf
Berikut ini tautan ke situs tersebut:
http://cemc.uwaterloo.ca/contests/past_contests.html
Tantangan
Diberikan array pembungkus dari dua nilai konstan, tentukan konfigurasi setelah n
evolusi untuk input integer positif n
. Kedua nilai ini mewakili sel hidup dan sel mati. Evolusi bekerja seperti ini:
Evolusi!
Setelah setiap iterasi, sel hidup jika memiliki tepat satu tetangga yang hidup di iterasi sebelumnya. Kurang dan itu mati karena kesepian; lagi dan mati karena kepadatan. Lingkungannya eksklusif: yaitu setiap sel memiliki dua tetangga, bukan tiga.
Sebagai contoh, mari kita lihat bagaimana 1001011010
berevolusi, di mana 1
sel hidup dan 0
sel mati.
(0) 1 0 0 1 0 1 1 0 1 0 (1)
* $ %
Sel di *
memiliki sel mati di kedua sisi sehingga mati kesepian.
Sel di $
memiliki sel hidup di satu sisi dan sel mati di sisi lain. Menjadi hidup.
Cel di %
memiliki sel hidup di kedua sisi sehingga tetap mati karena kepadatan.
Kriteria Menang
Kode terpendek menang.
I / O
Input akan menjadi daftar status sel sebagai dua nilai yang konsisten, dan integer yang mewakili jumlah input, dalam beberapa format yang masuk akal. Keluaran adalah daftar status sel setelah jumlah iterasi yang ditentukan.
Uji Kasus
start, iterations -> end
1001011010, 1000 -> 1100001100
100101011010000, 100 -> 000110101001010
0000000101011000010000010010001111110100110100000100011111111100111101011010100010110000100111111010, 1000 -> 1001111111100010010100000100100100111010010110001011001101010111011011011100110110100000100011011001
Test Case Case
uji ini membekukan hastebin dan melebihi batas ukuran pada pastebin
sumber
Theta(nt)
manan
panjang array dant
jumlah evolusi; algoritma yang lebih cepat dibutuhkanTheta(n lg t)
.Jawaban:
APL (Dyalog) , 14 byte
Anjuran untuk memulai status sebagai daftar Boolean dan kemudian untuk jumlah iterasi
Cobalah online!
⎕
numeric prompt (untuk daftar negara mulai Boolean)⊢
untuk itu, terapkan(
...)⍣⎕
fungsi tersembunyi berikut, waktu numerik-prompt¯1∘⌽
argumen diputar satu langkah ke kanan≠
berbeda dari (XOR)1∘⌽
argumen diputar satu langkah ke kirisumber
Jelly , 7 byte
Cobalah online!
Extra Test Case (catatan kaki untuk pemformatan) .
Penjelasan
sumber
05AB1E , 6 byte
Cobalah online!
Penjelasan
sumber