Magic squares of doubly even order: Difference between revisions
Content added Content deleted
(→{{header|Ruby}}: Added Ruby (without trampling over zkl)) |
|||
Line 405: | Line 405: | ||
</pre> |
</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}}== |
=={{header|zkl}}== |
||
{{trans|Java}} |
{{trans|Java}} |