Magic squares of doubly even order: Difference between revisions

+Stata
(+R)
(+Stata)
Line 2,343:
57 58 6 5 4 3 63 64
</pre>
 
=={{header|Stata}}==
 
{{trans|R}}
 
<lang stata>mata
function magic(n) {
if (mod(n,2)==1) {
p = (n+1)/2-2
a = J(n,n,.)
for (i=1; i<=n; i++) {
for (j=1; j<=n; j++) {
a[i,j] = n*mod(i+j+p,n)+mod(i+2*j-2,n)+1
}
}
} else if (mod(n,4)==0) {
p = n^2+n+1
a = J(n,n,.)
for (i=1; i<=n; i++) {
for (j=1; j<=n; j++) {
a[i,j] = mod(floor(i/2)-floor(j/2),2)==0 ? p-n*i-j : n*(i-1)+j
}
}
} else {
p = n/2
q = p*p
k = (n-2)/4+1
a = magic(p)
a = a,a:+2*q\a:+3*q,a:+q
i = 1..p
j = 1..k-1
if (k>2) j = j,n-k+3..n
m = a[i,j]; a[i,j] = a[i:+p,j]; a[i:+p,j] = m
j = 1,k
m = a[k,j]; a[k,j] = a[k:+p,j]; a[k:+p,j] = m
}
return(a)
}
end</lang>
 
<pre>. mata magic(8)
1 2 3 4 5 6 7 8
+-----------------------------------------+
1 | 64 2 3 61 60 6 7 57 |
2 | 9 55 54 12 13 51 50 16 |
3 | 17 47 46 20 21 43 42 24 |
4 | 40 26 27 37 36 30 31 33 |
5 | 32 34 35 29 28 38 39 25 |
6 | 41 23 22 44 45 19 18 48 |
7 | 49 15 14 52 53 11 10 56 |
8 | 8 58 59 5 4 62 63 1 |
+-----------------------------------------+</pre>
 
=={{header|VBScript}}==
1,336

edits