Begin forwarded message:

> From: Andrew Witte <ajwitte / gmail.com>
> Date: June 27, 2006 9:53:48 PM CDT
> To: submission / rubyquiz.com
> Subject: Please forward: Ruby Quiz submission (v2.0)
>
> #!/usr/bin/env ruby
>
> # The output spec changed, so my script has too.
> # It's a bit longer now, oh well.
>
> require 'enumerator'
>
> # Return a Pascal triangle (nested array form) of nrows rows.
> # triangle(3) => [[1], [1, 1], [1, 2, 1]]
> def triangle(nrows)
>   return [[1]] if nrows <= 1
>   previous = triangle(nrows-1)
>   center = previous[-1].enum_for(:each_cons, 2).map {|a| a[0] + a[1] }
>   return previous << ( [1] + center + [1] )
> end
>
> # Make an appropriately sized triangle
> the_triangle = triangle((ARGV[0] || 13).to_i)
>
> # Figure out how much space to allot for each number
> nspaces = the_triangle.flatten.max.to_s.length + 2
> nspaces += nspaces % 2  # make sure nspaces is odd, it looks better  
> that way
>
> # Format the lines of the triangle
> lines = the_triangle.map do |row|
>   row.inject('') do |line, entry|
>     line + entry.to_s.ljust(nspaces)
>   end
> end
>
> # Print out the triangle
> lines.each do |line|
>   puts line.center(lines[-1].length)
> end