ConwayのGame of Lifeの2次元配列を使って作業していて、各セルの「近傍」の合計を計算しようとすると、ゼロ値によってブロックされてしまいます。配列の前で「プット」が含まれるが、私が試したの選択肢のどれもが私に100%を与えない場合合計を得るには、配列内でnilを0に変換するにはどうすればよいですか?
def neighbor_count
grid.each_with_index do |row, idx|
row.each_with_index do |column, idx2|
[grid[idx - 1][idx2 - 1], grid[idx - 1][idx2], grid[idx - 1][idx2 + 1],
grid[idx][idx2 - 1], grid[idx][idx2], grid[idx][idx2 + 1],
grid[idx + 1][idx2 - 1], grid[idx + 1][idx2], grid[idx + 1][idx2 + 1]
].compact.sum
end
end
end
.compactは、ほとんどの結果を得ているようです。私はreduce(:+)、inject、.to_i、reject(nil値を取り除く)などを試みました。
ここには何が欠けていますか?
エラー:world.rb:35:block (2 levels) in neighbor_count': undefined method
[]」ゼロのために:NilClass(NoMethodError)
線35は
ありがとう。私はそれを取得し、それが原因でゼロ値を生成すると予想しています。範囲外の座標を効率的に排除する方法に関する提案はありますか? –
@JeremyFlanagan:うん、ちょっと仕事がうまくいくかどうか。 –
@JeremyFlanagan:ここに_years_前にコード化された人生のゲームがあります。だから、コードの判断はhttps://gist.github.com/stulentsev/0e25ae7b079466412a87de26fc4f11be :) –