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
Theta(nt)
mana n
panjang array dan t
jumlah evolusi; algoritma yang lebih cepat dibutuhkan Theta(n lg t)
.