[Swift Playgrounds] – ライフゲームでアルゴリズムを学ぼう – Blink編(Introduction)

2016.11.04

こんぬづは、最近はクリーンアーキテクチャについて考えるのが楽しい!田中です。

今回はSwift Playgroundsの『Blink』というコンテンツのIntroductionの紹介です。
少し長くなるので、今回はライフゲームの説明を主として次回コードの解説などをしていきます。

blink

Swift Playgroundsとは?

こちらをご覧ください。

[Swift Playgrounds] - Swift Playgroundsことはじめ - 全体紹介編

BlinkはSwift Playgroundsに入っているコンテンツの一つで、コンウェイのライフゲームを通してアルゴリズムについて学び、最終的には自分自身で考えたルールを作り出し、その通りにシミュレーションをすることを目的としたものです。

Introduction解説

このPlaygroundは隣り合う8つのセルの状態によって生死を判別するコンウェイのライフゲームを再現しています。
Introductionの章ではそのルールを説明しています。
また、シミュレーションはコードを実行することによってlive viewで見ることができます。

ライフゲームの解説

ライフゲームでは初期状態のみでその後の状態が決定される。碁盤のような格子があり、一つの格子はセル(細胞)と呼ばれる。各セルには8つの近傍のセルがある (ムーア近傍) 。各セルには「生」と「死」の2つの状態があり、あるセルの次のステップ(世代)の状態は周囲の8つのセルの今の世代における状態により決定される。(ライフゲーム - Wikipediaより)

セルの生死は次のルールに従う。

  • いずれかの死んでいるセルに隣接する生きたセルの数がちょうど3つであれば、そのセルは生きたセルとなる(誕生)
  • いずれかの生きているセルに隣接する生きたセルの数が2つか3つならば、そのセルは生きる(生存)
  • いずれかの生きているセルに隣接する生きたセルの数が2つより少なければ(= 1つ以下ならば)、そのセルは死ぬ(死 - 過疎 -)
  • いずれかの生きているセルに隣接する生きたセルの数が3つより多ければ(= 4つ以上ならば)、そのセルは死ぬ(死 - 過密 -)

セルのシミュレータにはグリッド上のすべてのセルを評価するためにループが使われています。
各ループのイテレーションごとにルールが適応され、次世代のセルが生成されます。

より詳しい解説としては上述したwikipediaを参照ください。
図としてセルの生死ルールが載っているのでよりわかりやすいかと思われます。

まとめ

コンウェイのライフゲームは以前から名前だけは知っていたのですが、改めて調べてみるとシンプルなルールで成り立っているもののその特徴はとても興味深く魅力的でした。
ルールを理解し、読んで、実装を考えてみるこのPlaygroundはアルゴリズムを楽しく学ぶことが出来る素晴らしい教材だと思いました。

次回はこのライフゲームについて実際にPlaygroundのコードに触れながら解説していきます。

参考