バックグラウンド
この挑戦はapsillersに敬意を表しており、彼は挑戦でBest of PPCG 2016の見た目ほど簡単ではないカテゴリを獲得しました。 おめでとうございます!
「自己紹介」ページで、このユーザーはGame of Lifeセルラオートマトン用の本当にすてきなシミュレータを持っています。(真剣に、それをチェックしてみてください。)一方、aspillaは「arrowslit」のスペイン語です。これらの事実に照らして、この課題はGame of Lifeの矢じりについてです。
ゲームオブライフarrowlits
GoLでは、矢印をグライダーで表し、壁を一連のブロックで表します。単一のグライダーが上から壁に近づき、壁の隙間を通過しようとします(矢印が点灯)。あなたの仕事は、グライダーが矢印に照らされているか、壁に衝突するかを確認することです。
入力
入力は、GoL構成を表すビットのグリッドです。任意の妥当な形式(2つのdistict印刷可能なASCII文字の複数行文字列、文字列のリスト、整数の2D配列、ブール値の2D配列など)で使用できます。明確にするために、文字の複数行の文字列を使用します.#
に、以下します。
入力には、いくつかのプロパティがあることが保証されています。最初は、その高さは2N一部のN≥6 、その幅が少なくともある2N + 2。入力はすべて.
sになりますが、最上部の3行のどこかがグライダーであり、中央の2行にブロックの壁があります。グライダーは南西または南東に向かっており、その位置は、壁が取り外された場合、下端に到達する前にサイドエッジを通過しない(ただし、グリッドのコーナーに到達する)ような位置です。グライダーは、最初に少なくとも1ステップ.
s だけ左右の端から分離されます。どのフェーズでもかまいません。
壁は、1列の.
sで区切られたブロックで構成されますが、1つの場所を除き、少なくとも2列の.
s で区切られます。グライダーのように、左端と右端のブロックも、.
sの1ステップだけエッジから分離されています。常に左端に少なくとも1つのブロックがあり、右端に1つのブロックがあります。
有効な入力グリッドの例を次に示します。
....#......................
..#.#......................
...##......................
...........................
...........................
...........................
.##.##............##.##.##.
.##.##............##.##.##.
...........................
...........................
...........................
...........................
...........................
...........................
出力
述べたように、あなたの仕事は、グライダーが壁に衝突するか、南端に到達するかを判断することです。この課題の目的上、シミュレーションの後半で何が起こっても、構成が単一のグライダーとブロックの壁で構成されなくなった場合、クラッシュが発生します。次の図は、南東のグライダーが2つの異なるフェーズでクラッシュすることなく通過できる最小のギャップを示しています(南西のグライダーの状態は対称的です)。
...#...........
.#.#...........
..##...........
...............
...............
##...........##
##...........##
...#...........
....#..........
..###..........
...............
...............
##...........##
##...........##
グライダーが壁を飛んでいる場合、真実の値を出力し、そうでなければ偽の値を出力します。上記の例では、グライダーが壁の左側に衝突するため、正しい出力は偽物です。
この課題のために、2 *(height-3)の入力でGoLをシミュレートすると仮定できます。ステップ、グライダーは期待される位置の一番下の行にあり、壁は無傷で、出力は真実であると仮定できます。
ルールとスコアリング
完全なプログラムまたは関数を作成できます。最も低いバイトカウントが優先されます。
テストケース
テストケースは非常に大きいため、GitHubリポジトリに収集しました。個々のファイルへのリンクは次のとおりです。