パスカルの三角形(Ruby)

パスカルの三角形とは、こんな感じのものです。

              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      

規則性がわかりますね。多項式 (a + b)n を展開すると、係数がこんな風に並びます。

Ruby関数型プログラミングっぽく書いてみました。結構きれいに書けます。

pascal = ->(n) {
  each_cons = ->(ar) {
    (ar.size < 2) ? [] : [ar[0] + ar[1]] + each_cons.(ar.drop(1))
  }
  n.zero? ? [1] : [1] + each_cons.(pascal.(n - 1)) + [1]
}

n = 8
n.times {|i| puts pascal.(i).join(" ").center(30)}