体験を伝える―『ガジェット通信』の考え方

面白いものを探しにいこう 本物を体験し体感しよう 会いたい人に会いに行こう 見たことのないものを見に行こう そしてそれをやわらかくみんなに伝えよう [→ガジェ通についてもっと詳しく] [→ガジェット通信フロアについて]

【コードゴルフ】Ozyさん出題「シンプル・ライフゲーム」問題解説と解答コード公開!

はじめに

まずは問題のおさらいです。

【ライフゲーム】

ライフゲームでは、格子状のフィールドの各マス目(セル)に対して、「生」と「死」の2つの状態を初期値として与え、次のルールによって世代変化します。

 

各セルについて、

 
「生」の状態の場合

・周囲の8セルのうち、「生」の状態のセルが2つまたは3つ存在する場合は、「生」の状態を継続する

・周囲の8セルのうち、「生」の状態のセルが1つ以下または4つ以上の場合は、「死」の状態になる

 
「死」の状態の場合

・周囲の8セルのうち、「生」の状態のセルが丁度3つ存在する場合は、「生」の状態になる

 
【コードゴルフ】Ozyさん出題「シンプル・ライフゲーム」問題解説と解答コード公開!

 
☆端のセルの扱い

フィールドの上下左右端のセルはループします。
つまり、左端のセルの左は右端のセル、上端のセルの上は下端のセルと考えてください。
たとえば、下図の黄色い部分(一番左上のセル)の周囲8セルは、青い部分になります。

【コードゴルフ】Ozyさん出題「シンプル・ライフゲーム」問題解説と解答コード公開!

 
【コードゴルフ】Ozyさん出題「シンプル・ライフゲーム」問題解説と解答コード公開!

 

【問題】

フィールドの初期状態と世代数Nを標準入力から受け取り、初期状態からN世代後の状態を出力してください。

 

【入力】

標準入力の1~3行目は整数値で、1行目は世代数N、2行目はフィールドの縦のサイズH、3行目はフィールドの横のサイズWです。
(N≦30, H≦40, W≦35)
4行目以降H行は、長さWの文字列です。
文字列は『*』と『.』のいずれかで、『*』が「生」の状態、『.』は「死」の状態を表します。

 

 

【出力】

標準出力に、初期状態からN世代後のフィールドを出力してください。

 

【入出力サンプル】

 

Case 1: Input

3 4 5 ….. .***. &#10…*. …..

Case 1: Output

..**. .*..* ..**. …..

 

Case 2: Input

5 8 7 ……. …..** …..** ……. ..*…. ..*.*.. .*.*… …*…

Case 2: Output

……. …..** …..** ……. …*… .**…. …**.. ..*….

1 2 3 4 5 6 7 8 9次のページ
CodeIQ MAGAZINEの記事一覧をみる
  • 誤字を発見した方はこちらからご連絡ください。
  • ガジェット通信編集部への情報提供はこちらから
  • 記事内の筆者見解は明示のない限りガジェット通信を代表するものではありません。

山寺宏一&高木渉で『ポプテピピック』

GetNews girl / GetNews boy