ここでのタスクは.rle
、ファイル名が(STDINまたはコマンドライン引数として)提供されているGolly またはプレーンテキストファイル(選択)から読み取り、そこにエンコードされたグリッド内の共通パターンを識別してカウントすることです。
または、代わりにSTDIN経由でファイルの内容を直接提供することもできます。
あなたのプログラムは少なくとも15の最も一般的な厳密な静物と5つの最も一般的な発振器とグライダーを特定し、区別できるべきです。
グライダーの4つの位相すべてと同様に、これらのオシレーターのすべての位相を認識する必要があります。
各パターンの最終カウントを含むリストを出力し、各パターンの名前と数量を別々の行に出力する必要があります。プログラムは、これらのパターンのすべてまたは少なくとも1つが見つかったパターンのみを出力リストに含めることができます。
カウントされる他のパターンの一部であるパターンはカウントされません。(たとえば、ビーコンの8セルフェーズは2ブロックとしてカウントされるべきではなく、船のタイも2隻としてカウントされるべきではありません)
入力がすでに安定しており、前述のセットにないパターンが含まれていないことを想定できます。入力グリッドが1024x1024ボックス内に収まると仮定することもできます。
これはcode-golfなので、最短のプログラムが優先されます。
RLEファイル形式の説明
RLEファイルには、ランレングスでエンコードされたライフグリッドが含まれています。で始まる行はすべて#
コメントであり、無視する必要があります。
最初の空ではなく、コメントではない行はの形式x=<width>,y=<height>,rule=<rule>
です。このタスクの目的上、ルールは常にになりますB3/S23
。この行を処理する前に削除する必要があるスペースを含めることができます(もちろん、この行を処理する必要はまったくありません。)
最初の行の後の非コメント行は、単一の文字列として扱われるべきです。これは、小数点以下の数字、文字で構成されなければならない$
、b
とo
、改行、および数字で終了しません。改行は無視されますが、改行は数字列に割り込まないと想定できます。
これは単一で終えられるかもしれません!
。
b
死んだセル、o
生きているセル、$
行の終わりを表します。10進数は、次の記号が何度も繰り返されるものとして扱われることを示します。
平文パターンエンコーディング
もう1つのオプションは、ここで説明する別のプレーンテキスト形式でパターンを読み取ることです。このエンコーディングでは、オフセルはハイフンで表され、オンセルは大文字のOで表され、改行で行が区切られます。
非コメント行はすべて、ハイフンで同じ長さにパディングされると想定できます。
で始まる行!
はコメントであり、無視されます。
いくつかのテストケース
RLE:
#This is a comment
x = 35, y = 16, rule = B3/S23
bo$2o$obo5$22bo$22bo$22bo2$18b3o3b3o2$22bo$22bo10b2o$22bo10b2o!
平文:
!This is a comment
-O---------------------------------
OO---------------------------------
O-O--------------------------------
-----------------------------------
-----------------------------------
-----------------------------------
-----------------------------------
----------------------O------------
----------------------O------------
----------------------O------------
-----------------------------------
------------------OOO---OOO--------
-----------------------------------
----------------------O------------
----------------------O----------OO
----------------------O----------OO
結果:
Glider 1
Blinker 4
Block 1
RLE:
x = 27, y = 15, rule = B3/S23
5b2o$5b2o9$11bo$o9bobo$o9bobo$o10bo12b3o!
#Here's a comment at the end
平文:
-----OO--------------------
-----OO--------------------
---------------------------
---------------------------
---------------------------
---------------------------
---------------------------
---------------------------
---------------------------
---------------------------
-----------O---------------
O---------O-O--------------
O---------O-O--------------
O----------O------------OOO
!Here's a comment at the end
結果:
Block 1
Blinker 2
Beehive 1
RLE:
#You may have multiple comments
#As shown here
x = 13, y = 11, rule = B3/S23
2o$2o2$12bo$12bo$12bo$2b2o$2b2o4b2o$7bo2bo$7bobo$8bo!
平文:
!You may have multiple comments
!As shown here
OO-----------
OO-----------
-------------
------------O
------------O
------------O
--OO---------
--OO----OO---
-------O--O--
-------O-O---
--------O----
結果:
Block 2
Blinker 1
Loaf 1
RLE:
# Pentadecathlon
# Discovered by John Conway
# www.conwaylife.com/wiki/index.php?title=Pentadecathlon
x = 10, y = 3, rule = B3/S23
2bo4bo2b$2ob4ob2o$2bo4bo!
平文:
! Pentadecathlon
! Discovered by John Conway
! www.conwaylife.com/wiki/index.php?title=Pentadecathlon
--O----O--
OO-OOOO-OO
--O----O--
結果:
Pentadecathlon 1
ボーナス
両方の入力形式(ファイル拡張子[ .rle
rleファイルと.cells
プレーンテキスト-他の拡張子の読み方は未定義]またはそれらを区別するコマンドラインフラグを使用)をサポートする場合、スコアから5%を差し引くことができます。
OOO.OO\n....OO