From: Pete Yandell Date: 2006-06-26T08:44:03+09:00 Subject: Solution: [QUIZ] pp Pascal (#84) OK, here's my solution. I've tried to make it as compact, neat and ruby-ish as possible. (It's not space efficient, in that it stores the entire triangle before printing it.) require 'enumerator' # Generate the triangle. n = ARGV[0].to_i rows = (2..n).inject([[1]]) do |rows, i| rows << ([0]+rows[-1]+[0]).enum_cons(2).map{|a,b| a+b } end # Work out the length in digits of the longest number. m = rows[-1][n/2].to_s.length # Print each row with appropriate spacing. rows.each do |row| print ' '*m*(n-row.length) print row.collect {|i| sprintf("%#{m}d", i) }.join(' '*m) print "\n" end Output looks like this: 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 1 10 45 120 210 252 210 120 45 10 1 1 11 55 165 330 462 462 330 165 55 11 1 1 12 66 220 495 792 924 792 495 220 66 12 1 Pete Yandell http://9cays.com/