Magic squares of doubly even order: Difference between revisions
Content added Content deleted
(→{{header|Haskell}}: Updated primitives and output) |
(Adding a python version) |
||
Line 1,162: | Line 1,162: | ||
Input [4,8,12..n] (0=Exit) |
Input [4,8,12..n] (0=Exit) |
||
></pre> |
></pre> |
||
=={{header|Python}}== |
|||
<lang python> |
|||
def MagicSquareDoublyEven(order): |
|||
sq = [range(1+n*order,order + (n*order)+1) for n in range(order) ] |
|||
n1 = order/4 |
|||
for r in range(n1): |
|||
r1 = sq[r][n1:-n1] |
|||
r2 = sq[order -r - 1][n1:-n1] |
|||
r1.reverse() |
|||
r2.reverse() |
|||
sq[r][n1:-n1] = r2 |
|||
sq[order -r - 1][n1:-n1] = r1 |
|||
for r in range(n1, order-n1): |
|||
r1 = sq[r][:n1] |
|||
r2 = sq[order -r - 1][order-n1:] |
|||
r1.reverse() |
|||
r2.reverse() |
|||
sq[r][:n1] = r2 |
|||
sq[order -r - 1][order-n1:] = r1 |
|||
return sq |
|||
def printsq(s): |
|||
n = len(s) |
|||
bl = len(str(n**2))+1 |
|||
for i in range(n): |
|||
print ''.join( [ ("%"+str(bl)+"s")%(str(x)) for x in s[i]] ) |
|||
print "\nMagic constant = %d"%sum(s[0]) |
|||
printsq(MagicSquareDoublyEven(8)) |
|||
</lang> |
|||
{{out}}<pre> |
|||
1 2 62 61 60 59 7 8 |
|||
9 10 54 53 52 51 15 16 |
|||
48 47 19 20 21 22 42 41 |
|||
40 39 27 28 29 30 34 33 |
|||
32 31 35 36 37 38 26 25 |
|||
24 23 43 44 45 46 18 17 |
|||
49 50 14 13 12 11 55 56 |
|||
57 58 6 5 4 3 63 64 |
|||
Magic constant = 260 |
|||
>>> |
|||
</pre> |
|||
=={{header|REXX}}== |
=={{header|REXX}}== |