Magic squares of doubly even order: Difference between revisions

→‎{{header|Ruby}}: Added Ruby (without trampling over zkl)
(Undo revision 225368 by Steenslag (talk))
(→‎{{header|Ruby}}: Added Ruby (without trampling over zkl))
Line 405:
</pre>
 
=={{header|Ruby}}==
 
<lang ruby>def double_even_magic_square(n)
raise ArgumentError, "Need multiple of four" if n%4 > 0
block_size, max = n/4, n*n
pre_pat = [true, false, false, true,
false, true, true, false]
pre_pat += pre_pat.reverse
pattern = pre_pat.flat_map{|b| [b] * block_size} * block_size
flat_ar = pattern.each_with_index.map{|yes, num| yes ? num+1 : max-num}
flat_ar.each_slice(n).to_a
end
 
def to_string(square)
n = square.size
fmt = "%#{(n*n).to_s.size + 1}d" * n
square.inject(""){|str,row| str << fmt % row << "\n"}
end
 
puts to_string(double_even_magic_square(8))</lang>
{{out}}
<pre>
1 2 62 61 60 59 7 8
56 55 11 12 13 14 50 49
48 47 19 20 21 22 42 41
25 26 38 37 36 35 31 32
33 34 30 29 28 27 39 40
24 23 43 44 45 46 18 17
16 15 51 52 53 54 10 9
57 58 6 5 4 3 63 64
</pre>
=={{header|zkl}}==
{{trans|Java}}
1,149

edits