Magic squares of doubly even order: Difference between revisions

Added solution for D
(Doubly even magic squares in J)
(Added solution for D)
Line 508:
}
}</lang>
<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|D}}==
{{trans|Java}}
<lang D>import std.stdio;
 
void main() {
int n=8;
foreach(row; magicSquareDoublyEven(n)) {
foreach(col; row) {
writef("%2s ", col);
}
writeln;
}
writeln("\nMagic constant: ", (n*n+1)*n/2);
}
 
int[][] magicSquareDoublyEven(int n) {
import std.exception;
enforce(n>=4 && n%4 == 0, "Base must be a positive multiple of 4");
 
int bits = 0b1001_0110_0110_1001;
int size = n * n;
int mult = n / 4; // how many multiples of 4
 
int[][] result;
result.length = n;
foreach(i; 0..n) {
result[i].length = n;
}
 
for (int r=0, i=0; r<n; r++) {
for (int c=0; c<n; c++, i++) {
int bitPos = c / mult + (r / mult) * 4;
result[r][c] = (bits & (1 << bitPos)) != 0 ? i + 1 : size - i;
}
}
 
return result;
}</lang>
 
{{out}}
<pre> 1 2 62 61 60 59 7 8
9 10 54 53 52 51 15 16
1,452

edits