Pascal Triangle Numbers
Using the list shifting and zipping together
def ptn n (1..n).inject([1])do |s,k| yield s (s+[0]).zip([0]+s).map{|e| e[0]+e[1]} end end ptn 10, &proc{|s| puts s.join(" ")}
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