読者です 読者をやめる 読者になる 読者になる

AccessViolation Exception

仕事でもはんだづけ、家でもはんだづけ

ScalaでLifeGameをささっと実装

f:id:kamiyaowl:20140305213742p:plain

ぬるぬる次の世代になっていきます

Scalaも少しは馴染んできたところで簡単に作れそう?なライフゲームを実装してみた。実質1時間かからないくらいで出来たかな。いい出来だった。

What's the Lifegame?


ライフゲーム - Wikipedia ページ中央あたりにある

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

誕生

死んでいるセルに隣接する生きたセルがちょうど3つあれば、次の世代が誕生する。

生存

生きているセルに隣接する生きたセルが2つか3つならば、次の世代でも生存する。

過疎

生きているセルに隣接する生きたセルが1つ以下ならば、過疎により死滅する。

過密

生きているセルに隣接する生きたセルが4つ以上ならば、過密により死滅する。

ご丁寧に実装方法が書いてあります。この通りに実装すれば終了です。

Implemention


またしてもScala。だんだん可愛くなってきた。まとめだけ

  • immutableな実装にした。
    • いい加減どういう順序で処理をしていくべきかわかってきた気がする...気がする...
  • 配列等の境界チェックの出ない実装にする
    • みんな大好きMapで対応
  • 無限に表示させておきたいな
    • 無限リストで持てばいいのか

無限リストに対してforeachされたらどうなるか挙動は試していなかったが遅延評価でshow内で表示が必要になるごとに世代が計算されるだろうと見込んだら無事に無限に計算してくれた。イケメン過ぎる

今更だがスクショを貼ったら記事書いてる画面も入ったけどまぁいいや。

ScalaでLifegame


2015/02/22 追記

一年後、こんな酷いコードになりました。

scalaでライフゲームを書くと - AccessViolation Exception