始める前に、この課題はもともと私のものではありませんでした
ウォータールー大学の功績。これは、Canadian Computing Competition 2016、Senior Problem 5によるものです。コンテストPDFへのクリック可能なリンクは次のとおりです。
http://cemc.uwaterloo.ca/contests/computing/2016/stage%201/seniorEn.pdf
ここにサイトへのリンクがあります:
http://cemc.uwaterloo.ca/contests/past_contests.html
チャレンジ
2つの定数値のラッピング配列を指定してn
、正の整数入力の進化後の構成を決定しますn
。これらの2つの値は、生細胞と死細胞を表します。進化は次のように機能します。
進化!
各反復の後、前の反復でちょうど1つの生きている隣接セルがあった場合、セルは生きています。少なくてもそれは孤独で死ぬ。それ以上、それは過密状態で死にます。近傍は排他的です。つまり、各セルには3つではなく2つの隣接があります。
たとえば、生細胞と死細胞が1001011010
どこにあるかを見てみましょう。1
0
(0) 1 0 0 1 0 1 1 0 1 0 (1)
* $ %
の細胞はその*
両側に死んだ細胞を持っているので、孤独で死ぬ。
の細胞の$
片側には生細胞、もう一方には死細胞があります。生きている。
のセルの%
両側には生細胞があるため、過密状態では死んでいます。
受賞基準
最短のコードが勝ちます。
I / O
入力は、2つの一貫した値としてのセルの状態のリストと、入力の数を表す整数です。出力は、指定された回数の反復後のセル状態のリストになります。
テストケース
start, iterations -> end
1001011010, 1000 -> 1100001100
100101011010000, 100 -> 000110101001010
0000000101011000010000010010001111110100110100000100011111111100111101011010100010110000100111111010, 1000 -> 1001111111100010010100000100100100111010010110001011001101010111011011011100110110100000100011011001
Theta(nt)
場合n
、配列の長さであり、t
進化の数です。より速いアルゴリズムがかかりますTheta(n lg t)
。