From: Tom Ayerst Date: 2007-01-17T07:26:16+09:00 Subject: Re: Number Spiral (#109) This one works for even and odd spirals (obvious really) class SpiralMaker def make_spiral(square_size) # allow for even numbered squares by missing off the last row and column size = square_size if (square_size.modulo(2) == 0) square_size = square_size+1 end #step along row (1..size).each do |y| # step down columns (1..size).each do |x| # are we in top left or bottom right half of spiral? if (y+x <= square_size) # top left - calculate value sn = square_size - (2 * (min(x,y) - 1)) val = (sn*sn) - (3*sn) + 2 - y + x else # bottom right - calculate value sn = square_size - (2 * (square_size - max(x,y))) val = (sn*sn) - sn + y - x end # Print value STDOUT.printf "%03d ", val end # Next line STDOUT.print "\n" end end def min(a,b) (a <= b) ? a : b end def max(a,b) (a >= b) ? a : b end end maker = SpiralMaker.new maker.make_spiral 3 >