ライフゲーム最後まで作ってみました

ライフゲーム最後まで
作ってみました
kanazawa.rb meetup28
2014/12/20
ライフゲームとは
http://ja.wikipedia.org/wiki/ライフゲーム
設計
meetup26
Coderetreat mini in Kanazawa.rb
設計ポイント
どのセルにおいても周囲に8つのセル
が存在するようにし、判定処理を共
通にする
例えば
隅のセルの場合、隣接するセルは3つ
①
②③
①
②③④
⑤
隅以外の1行目セルの場合、隣接するセルは5つ
1つのセルに隣接するセルの数によって
処理が 異なるのは複雑になるため、好
ましくない
状態が変動しない2行2列を追加することに
よって常にセルに対して隣接するセルは8つ
①
②③④
⑤
⑥ ⑦ ⑧
実装
実装ポイント
状態が変更される前のセル配列で判定
処理を行う為、状態が変更された配列
とは別に保持しておく必要がある
どツボに嵌っちゃいました
変更前の配列がコピーできない
私のRubyでの勘違い
cloneやdupはディープコピーではない
ディープコピーを使い場合はMarshal
変更前の配列がコピー出来たと持って、
コピー元配列の値を変更すると、コピー
先配列まで値が変わってしまう。
[1] pry(main)> a = Array.new(3).map { Array.new(3) { Object.new} }
=> [[#<Object:0x007fdd19c595d8>, #<Object:0x007fdd19c595b0>, #<Object:0x007fdd19c59588>],
[#<Object:0x007fdd19c59538>, #<Object:0x007fdd19c59510>, #<Object:0x007fdd19c594e8>],
[#<Object:0x007fdd19c59498>, #<Object:0x007fdd19c59470>, #<Object:0x007fdd19c59448>]]
[2] pry(main)> b = a.clone
=> [[#<Object:0x007fdd19c595d8>, #<Object:0x007fdd19c595b0>, #<Object:0x007fdd19c59588>],
[#<Object:0x007fdd19c59538>, #<Object:0x007fdd19c59510>, #<Object:0x007fdd19c594e8>],
[#<Object:0x007fdd19c59498>, #<Object:0x007fdd19c59470>, #<Object:0x007fdd19c59448>]]
上記のようにcloneだと、コピー元とコピー先
のオブジェクトが同じになってしまう
[1] pry(main)> a = Array.new(3).map { Array.new(3) { Object.new} }
=> [[#<Object:0x007fdd19c595d8>, #<Object:0x007fdd19c595b0>, #<Object:0x007fdd19c59588>],
[#<Object:0x007fdd19c59538>, #<Object:0x007fdd19c59510>, #<Object:0x007fdd19c594e8>],
[#<Object:0x007fdd19c59498>, #<Object:0x007fdd19c59470>, #<Object:0x007fdd19c59448>]]
[6] pry(main)> b = Marshal.load(Marshal.dump(a))
=> [[#<Object:0x007fdd1d2d5eb8>, #<Object:0x007fdd1d2d5e90>, #<Object:0x007fdd1d2d5e68>],
[#<Object:0x007fdd1d2d5e18>, #<Object:0x007fdd1d2d5df0>, #<Object:0x007fdd1d2d5dc8>],
[#<Object:0x007fdd1d2d5d78>, #<Object:0x007fdd1d2d5d50>, #<Object:0x007fdd1d2d5d28>]]
Marshalを使うことによって、コピー元とコ
ピー先のオブジェクトが別物になる
Demo
まとめ
私には45分で設計・実装は無理だと思
い知った。実装だけで90分かかった。
ライフゲーム最後まで作って
もやもやがすっきりした。
少しだけRubyの理解が深まった
ご静聴ありがとうございました
1 sur 21

Contenu connexe

En vedette(20)

How to have difficult conversations How to have difficult conversations
How to have difficult conversations
Rajiv Jayarajah, MAppComm, ACC4.1K vues
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
Christy Abraham Joy82.1K vues
ChatGPT webinar slidesChatGPT webinar slides
ChatGPT webinar slides
Alireza Esmikhani30.3K vues
More than Just Lines on a Map: Best Practices for U.S Bike RoutesMore than Just Lines on a Map: Best Practices for U.S Bike Routes
More than Just Lines on a Map: Best Practices for U.S Bike Routes
Project for Public Spaces & National Center for Biking and Walking6.9K vues
Barbie - Brand Strategy PresentationBarbie - Brand Strategy Presentation
Barbie - Brand Strategy Presentation
Erica Santiago25.1K vues
9 Tips for a Work-free Vacation9 Tips for a Work-free Vacation
9 Tips for a Work-free Vacation
Weekdone.com7.2K vues
I Rock Therefore I Am. 20 Legendary Quotes from PrinceI Rock Therefore I Am. 20 Legendary Quotes from Prince
I Rock Therefore I Am. 20 Legendary Quotes from Prince
Empowered Presentations142.8K vues
How to Map Your FutureHow to Map Your Future
How to Map Your Future
SlideShop.com275.1K vues

ライフゲーム最後まで作ってみました