CCC 2016:サークルオブライフ


8

始める前に、この課題はもともと私のものではありませんでした

ウォータールー大学の功績。これは、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どこにあるかを見てみましょう。10

(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

テストケース
このテストケースは、ハステビンを凍結し、ペーストビンのサイズ制限を超えました


2
バイトカウントがタイブレーカーにすぎない場合は、コードゴルフとしてタグ付けしないでください。より簡潔な言語に答えを移植して勝つことができれば、コンテストはコードゴルフコンテストに退化するので、それが良いタイブレーカーかどうかもわかりません。
デニス

@デニスそう、タグを外します。そのとき、タイブレークのために何を提案しますか?最初の提出も私の考えの1つです。
HyperNeutrino 2017年

2
複数のパラメータがある場合の複雑さの意味が分からないので、今のところ私は不明確であると投票しています。
feersum

1
@feersum、最速のアルゴリズムにはほんの少しの遊びがあります。ナイーブアルゴリズムがかかるTheta(nt)場合n、配列の長さであり、t進化の数です。より速いアルゴリズムがかかりますTheta(n lg t)
Peter Taylor

1
@ Notts90私の最新の編集がそれをより明確にすることを願っています。
HyperNeutrino 2017年

回答:


6

APL(Dyalog)、14バイト

ブールリストとして開始状態を要求し、次に反復回数を要求します

(1∘⌽≠¯1∘⌽)⍣⎕⊢⎕

オンラインでお試しください!

 数値プロンプト(開始状態のブールリスト用)

 その上で、適用

()⍣⎕ 次の暗黙関数、数値プロンプト時間

¯1∘⌽ 引数は1ステップ右に回転しました

 (XOR)とは異なる

1∘⌽ 引数は1ステップ左に回転しました



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.