Pascal’s Triangle in Ruby
My solution to the Pascal’s Triangle quiz this week:
#!/usr/bin/env ruby
def center_str s, len
n = (len - s.length) / 2.0
' '*(n.floor) + s + ' '*(n.ceil)
end
n = ARGV[0].to_i
rows = [[1]]
for i in 1..(n-1)
k = -1; r = rows[i-1] + [0]
rows << r.map{ |x| j = k; k+=1; x + r[j] }
end
m = rows.last[n/2].to_s.length * 2
n = n * m
rows.each do |r|
puts center_str(r.collect{|x| center_str(x.to_s, m)}.join, n)
end
Sample output:
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