#!/usr/bin/ruby
module Pascal
   module_function
   def next_row(r)
     [1] + (0...r.size-1).map{|i|r[i]+r[i+1]} + [1]
   end

   def pyramid(n)
     n==1 ? [[1]] : (p=pyramid(n-1)) << next_row(p[-1])
   end

   def pyramid_string(p)
     number_spacing = 1
     slot_width = p[-1].map{|n|n.to_s.size}.max + number_spacing
     row_width = slot_width * p[-1].size
     p.map {|row| row.map {|n| n.to_s.center(slot_width)}.join.center 
(row_width)}.join("\n")
   end
end

if __FILE__==$0
   puts Pascal::pyramid_string(Pascal::pyramid(Integer(ARGV[0]) || 10))
end
pascal.rb (END)