1. ホーム
  2. language-agnostic

コードゴルフ:コンウェイの人生ゲーム

2023-10-23 09:35:55

質問

課題です。 ジョン・H・コンウェイの 人生ゲーム セルラー・オートマトン [ リンク ]

EDITです。 約1週間の競争の末、勝者を決定しました。 pdehaan でMatlabの解を打ち負かしたからです。 1 文字でMatlabの解を打ち負かしたことです。

Game of Life を知らない人のために説明すると、正方形のマス目からなるグリッド(理想的には無限)を取ります。セルは生きている(埋まっている)か死んでいる(空)かです。次の時間のステップでどのセルが生きているかは、以下のルールを適用して決定します。

  1. 2 つ未満の生きている隣人を持つ生きている細胞は、人口不足によって引き起こされるかのように、死ぬ。
  2. 3つ以上のライブの隣人を持つライブセルは、過密状態によって引き起こされたかのように、死にます。
  3. 2つまたは3つのライブネイバーを持つライブセルは、次の世代に生き続けます。
  4. ちょうど3つの生きている隣人を持つ死んだ細胞は、あたかも生殖によって、生きている細胞になる。

あなたのプログラムは、コマンドラインの引数として指定された 40x80 文字の ASCII テキストファイルと、実行する反復回数 (N) を読み込みます。最後に、N 回繰り返した後のシステムの状態を ASCII ファイル out.txt に出力します。

関連ファイルを含む実行例です。

in.txt:

................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
..................................XX............................................
..................................X.............................................
.......................................X........................................
................................XXXXXX.X........................................
................................X...............................................
.................................XX.XX...XX.....................................
..................................X.X....X.X....................................
..................................X.X......X....................................
...................................X.......XX...................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................

100回繰り返し実行する。

Q:\>life in.txt 100

結果出力(out.txt)

................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
..................................XX............................................
..................................X.X...........................................
....................................X...........................................
................................XXXXX.XX........................................
................................X.....X.........................................
.................................XX.XX...XX.....................................
..................................X.X....X.X....................................
..................................X.X......X....................................
...................................X.......XX...................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................

ルールです。

  • ファイルの読み書きにファイルI/Oを使用する必要があります。
  • 引数として入力ファイルと反復回数を受け取る必要があります。
  • 指定されたフォーマットでout.txtを生成(存在する場合は上書き)する必要があります。
  • あなたは はありません。 ボードのエッジを処理する必要があります (回り込み、無限グリッドなど)
  • EDIT: あなたは する は出力ファイルに改行が必要です。

文字数で勝敗を決めます。

がんばってください。

どのように解決するのですか?

perl, 127 <ストライク 129 135 文字数

さらに数文字を削除することに成功しました....

$/=pop;@b=split'',<>;map{$n=-1;@b=map{++$n;/
/?$_:($t=grep/X/,@b[map{$n+$_,$n-$_}1,80..82])==3|$t+/X/==3?X:'.'}@b}1..$/;print@b