CodeIQ過去問集12:【コードゴルフ】シンプル・ライフゲーム
本稿はCodeIQで2015年11月5日~2015年11月19日に出題された「【コードゴルフ】シンプル・ライフゲーム」という問題を再編集したものです。 ※出題時と記述が一部異なる場合がありますがご了承ください。
【コードゴルフ】シンプル・ライフゲーム
【ライフゲーム】
ライフゲームでは、格子状のフィールドの各マス目(セル)に対して、「生」と「死」の2つの状態を初期値として与え、次のルールによって世代変化します。
各セルについて、
「生」の状態の場合
周囲の8セルのうち、「生」の状態のセルが2つまたは3つ存在する場合は、「生」の状態を継続する
周囲の8セルのうち、「生」の状態のセルが1つ以下または4つ以上の場合は、「死」の状態になる
「死」の状態の場合
- 周囲の8セルのうち、「生」の状態のセルが丁度3つ存在する場合は、「生」の状態になる
☆端のセルの扱い
フィールドの上下左右端のセルはループします。 つまり、左端のセルの左は右端のセル、上端のセルの上は下端のセルと考えてください。 たとえば、下図の黄色い部分(一番左上のセル)の周囲8セルは、青い部分になります。
【問題】
フィールドの初期状態と世代数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 ..... .***. ...*. .....
Case 1: Output
..**. .*..* ..**. .....
Case 2: Input
5 8 7 ....... .....** .....** ....... ..*.... ..*.*.. .*.*... ...*...
Case 2: Output
....... .....** .....** ....... ...*... .**.... ...**.. ..*....
↓からサンプルデータをダウンロードできます https://bitbucket.org/ozy4dm/codeiq/downloads/lifegame.zip