From: "John Baylor" <john.baylor@gmail.com>
Date: June 27, 2006 11:55:52 PM CDT
To: submission@rubyquiz.com
Subject: Please Forward: Ruby Quiz SubmissionThis is my first hack at a quiz solution - the previous ones have been fun to read and follow; I'm looking forward to the next one (where I won't be quite so late in my answer).
# pp_pascal.rb
# for details, see http://www.rubyquiz.com/quiz84.htmlclass String
def center( width )
return self if self.length >= width
ret = self
0.upto(width) do |w|
ret = ret + ' '
return ret if ret.length >= width
ret = ' ' + ret
return ret if ret.length >= width
end
ret
end
endclass Integer
def to_centered_s( width )
ret = (self > 0) ? self.to_s.center(width) : ''
end
endrows = ARGV[0].to_i
max = 0
allRows =
prevRow = [0,1,0]
allRows[0] = prevRow
(2..rows).each do |row|
nextRow =
(2..prevRow.length).each do |col|
nextVal = (prevRow[col-2]+prevRow[col-1])
nextRow << nextVal
end
prevRow = [0, nextRow, 0].flatten
allRows[row-1] = prevRow
end
maxWidth = prevRow[( prevRow.length / 2).to_i].to_s.length
totalWidth = rows * (maxWidth*2)
puts "rows=#{rows}, mw=#{maxWidth}, tw=#{totalWidth}"
allRows.each do |row|
row = row[1..-2]
row.collect! { |x| x = x.to_centered_s (maxWidth*2-1) }
puts row.join(' ').center(totalWidth)
endNow I can look at the other solutions...
thanks!
JB
···
Begin forwarded message: