From: doug meyer Date: 2007-05-21T23:26:37+09:00 Subject: Re: [QUIZ] Magic Squares (#124) Hey, Did anyone else run into the problem of trying to setup your square using: Array.new(size, Array.new(size)) that was annoying! And I wasted too much time with formating the output. http://pastie.caboo.se/63288 #!/usr/bin/env ruby # Douglas Meyer class Array def sum inject(0){|a,v|a+=v} end end rows = ARGV[0].to_i puts "Sorry, this program only works for odd row values!" if rows % 2 == 0 row_sum = (1..rows**2).to_a.sum/rows puts "Row Sum: #{row_sum}" decimals = (Math::log(row_sum)/Math::log(10)).to_i square = Array.new(rows){Array.new(rows, 0)} row = (rand*rows+1).to_i col = (rand*rows+1).to_i #Computer square (1..rows**2).each do |count| row = (row - 1) % rows col = (col - 1) % rows square[row][col] = count unless square[(row-1)%rows][(col-1)%rows] == 0 col -= 2 row -= 1 end end #Display and check sums string = "% #{decimals+2}d"*rows+" = % #{decimals+1}d" square.each{ |row| output = row output << row.sum puts string % output } puts (" "*(decimals)+"= ")*rows string = "% #{decimals+2}d"*rows puts string % square.inject(Array.new(rows,0)){|sum,row| sum = sum.zip(row).map{|a|a.sum} } On 5/21/07, David Tran wrote: > Hi, > > Updated again on SinglyEvenMagicSquare class. ( shorter ) > Basically, it almost remains the same. > > Don't like to post too many emails when I find/try to improve my > program on the details ... > If you read my previous 2 post solution, and like to see the "little" > change, please go to my blog: ( it will have my last updated version ) > > http://davidtran.doublegifts.com/blog/?p=27 > > otherwise, I am sorry to bother you on the mailing list. > > regards, > David Tran > >