From: Mark Van Holstyn Date: 2006-06-26T06:51:38+09:00 Subject: Re: [QUIZ][SOLUTION] pp Pascal (#84) ------=_Part_12540_18833699.1151272291096 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline Here is my solution... rows = ( ARGV.shift || 1 ).to_i tri = Array.new( rows ) { |i| Array.new( i+1 ) } tri.each_with_index do |row, rowno| row.fill do |colno| ( colno == 0 or colno == rowno ) ? 1 : tri[rowno-1][colno-1] + tri[rowno-1][colno] end end cols, col_w = tri.last.length, tri.last.max.to_s.length+1 tri.each do |row| row_strs = row.collect { |col| col.to_s.center( col_w ) } puts row_strs.join.center( cols*col_w ) end mark On 6/25/06, Robert Retzbach wrote: > > Hello, > > you can take this as negative example, cause I store the triangle and > the formatted output :) Thus it's much slower than most solutions. > > kind regards > Robert > > > > #!C:\ruby\bin\ruby.exe > > class PTriangle > def build num = 4 > @body = Array.new > > # fill the empty triangle > # using non-recursive algo > ( num + 1 ).times do | row | > row.times do | pos | > if pos == 0 or pos == row - 1 > number = 1 > else > number = @body[ row - 2 ][ pos - 1 ] + @body[ row - 2 ][ pos ] > end > @body[ row - 1 ] ||= [] > @body[ row - 1 ][ pos ] = number > end > end > > @body > end > > def render > @rendered = [] > > # calculate maximum number length > # needed for alignment > max = @body.last[ @body.last.size / 2 ].to_s.size > > # shift all lines to the right if a new line is added > # right justify all numbers > @body.each do | row | > @rendered.map! { | line | ' ' * max << line } > @rendered << row.map { | num | num.to_s.rjust( max * 2, ' ' ) }.join > end > > # cleanup, don't know how to do it more elegant > # => remove not necessary indentation > @rendered.map! { | line | line[ ( max * 2 - 1 )..-1 ] } > end > end > > if __FILE__ == $0 > level = ARGV.first.to_i > level = 4 unless level > 0 > > pt = PTriangle.new > pt.build level > puts pt.render > end > > > -- Mark Van Holstyn mvette13@gmail.com http://lotswholetime.com ------=_Part_12540_18833699.1151272291096--