«前の日記(Sat, 23 Dec 2006 (平成18年)) 最新 次の日記(Mon, 25 Dec 2006 (平成18年))» 編集 RSS with tsukkomi RSS without tsukkomi

実験的「実験的日記」


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 さんの解法を手を動かして確かめてみた。こんなのは思いつかないけど、何がどうなっているのか理解できるようになっただけ進歩はしているのだと思っておこう。

目次

«前の日記(Sat, 23 Dec 2006 (平成18年)) 最新 次の日記(Mon, 25 Dec 2006 (平成18年))» 編集