Sun, 24 Dec 2006 (平成18年) [長年日記]
_ パスカルの三角形
ピッケル本第二版第四章を読書会で読んで、yield がなんとなく理解できたのがうれしくて舞い上がっている頭で書いたらこうなった。
def pascal_triangle(n) a = [1] n.times { yield a b = [1, 1] (1...a.size).each {|i| b[i, 0] = a[i-1] + a[i] } a = b } end pascal_triangle(10) {|result| p result}
実行結果
[1] [1, 1] [1, 2, 1] [1, 3, 3, 1] [1, 4, 6, 4, 1] [1, 5, 10, 10, 5, 1] [1, 6, 15, 20, 15, 6, 1] [1, 7, 21, 35, 35, 21, 7, 1] [1, 8, 28, 56, 70, 56, 28, 8, 1] [1, 9, 36, 84, 126, 126, 84, 36, 9, 1]
さて、プログラマの人はどう書くのだろうと探してこういう解法を見つけたけど、訳がわからなくて解読中。あ、こちらの解法は理解できる。Array#inject って便利なんだな。
追記: rubyco さんの解法を手を動かして確かめてみた。こんなのは思いつかないけど、何がどうなっているのか理解できるようになっただけ進歩はしているのだと思っておこう。