[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Fwd: Please Forward: Ruby Quiz Submission

James Gray

5/20/2007 3:12:00 PM

Begin forwarded message:

> From: James Koppel <darmaniiii@yahoo.com>
> Date: May 18, 2007 1:35:48 PM CDT
> To: submission@rubyquiz.com, submission@rubyquiz.com
> Subject: Please Forward: Ruby Quiz Submission
>
> Here is my solution to Ruby Quiz 124. It does not implement the
> extra credit. It uses the following algorithm (courtesy of Wikipedia):
>
> "Starting from the central column of the first row with the number
> 1, the fundamental movement for filling the squares is diagonally
> up and right, one step at a time. If a filled square is
> encountered, one moves vertically down one square instead, then
> continuing as before. When a move would leave the square, it is
> wrapped around to the last row or first column, respectively."
>
>
> def magic_square(n)
> square = [].fill(nil,0...n).map{
> [].fill(nil,0...n)}
> x,y = (n-1)/2, 0
> nxt = 1
> while nxt <= n**2
> square[y][x] = nxt
> nxt += 1
> if square[(y-n-1)%n][(x+n+1)%n]
> y += 1
> else
> x,y, = (x+n+1)%n,(y-n-1)%n
> end
> end
> square
> end
>
> n = ARGV[0].to_i
> digits = (n**2).to_s.length
> square = magic_square(n)
> square.map! {|arr| arr.map{|x|" " * (digits - x.to_s.length) + "#
> {x}"}}
> n.times {|t|
> puts "+" + ("-" * (n*(digits + 3)-1)) + "+"
> puts "| #{square[t].join(' | ')} |"}
> puts "+" + ("-" * (n*(digits + 3)-1)) + "+"
>
> Pinpoint customers who are looking for what you sell.