[#41630] [ANN] langhelp-0.9.0 — rubikitch@...
るびきちです。
7 messages
2005/12/01
[#41654] Hashを継承したクラスの利用方法について — saitani <cxj15527@...>
お世話になります。
9 messages
2005/12/04
[#41720] Tempfile#== — とみたまさひろ <tommy@...>
とみたです。
5 messages
2005/12/21
[#41728] ruby 1.8.4 released — Yukihiro Matsumoto <matz@...>
まつもと ゆきひろです
9 messages
2005/12/24
[ruby-list:41695] Ruby本のlifegame
From:
Norio Kobayashi <ncoba@...>
Date:
2005-12-11 04:26:17 UTC
List:
ruby-list #41695
『オブジェクト指向スクリプト言語Ruby』第1版第5刷 で
Ruby の勉強をしています。
上の本に載っているライフゲームについてですが、p272 の nextgen メソッド
def nextgen
n = {}
@lives.each_key {|geom| # (1)
n[geom] ||= 0
@neighbors[geom.y][geom.x].each {|pos|
n[geom+pos] ||= 0
n[geom+pos] += 1
}
}
n.each {|geom, count|
if count == 3 || @lives[geom] && count == 2
@lives[geom] = true
else
@lives[geom] = nil # (2)
end
}
end
(2) のところで、「生物が存在しない」として nil を代入していますが、
(1) で全てのキーに対して、すなわち、生物が存在しない所(nil)も、
生物が存在するとして計算してしまっているので、これだとうまくいかないと
思うのですが…。
・(1) で @lives[geom] == true に対してのみ計算を行う
・(2) を @lives.delete(geom) に書き換える
のどちらかが必要だと思います。
また、p273 のリスト 6-11 には、作成したプログラムをテストするコードが
載っていますが、to_s メソッドを本の中では再定義していないので、
class LifeGame
def to_s
board = []
for i in 0..@height-1
board << " " * @width
end
each_life{|geom| board[geom.y][geom.x] = "*"}
board
end
end
のようなコードが載っていた方がうれしいです。
Ruby 勉強中なので、間違っていたらすみません。