Magic squares of doubly even order: Difference between revisions
Undo revision 225368 by Steenslag (talk)
(→{{header|Ruby}}: Added Ruby) |
|||
Line 405:
</pre>
=={{header|
{{trans|Java}}
<lang zkl>class MagicSquareDoublyEven{
fcn init(n){ var result=magicSquareDoublyEven(n) }
fcn toString{
sink,n:=Sink(String),result.len(); // num collumns
fmt:="%2s ";
foreach row in (result)
{ sink.write(row.apply('wrap(n){ fmt.fmt(n) }).concat(),"\n") }
sink.write("\nMagic constant: %d".fmt((n*n + 1)*n/2));
sink.close();
}
fcn magicSquareDoublyEven(n){
if (n<4 or n%4!=0 or n>16)
throw(Exception.ValueError("base must be a positive multiple of 4"));
bits,size,mult:=0b1001011001101001, n*n, n/4;
result:=n.pump(List(),n.pump(List(),0).copy); // array[n,n] of zero
foreach i in (size){
bitsPos:=(i%n)/mult + (i/(n*mult)*4);
value:=(bits.bitAnd((2).pow(bitsPos))) and i+1 or size-i;
result[i/n][i%n]=value;
}
result;
}
}
MagicSquareDoublyEven(8).println();</lang>
{{out}}
<pre>
Magic constant: 260
</pre>
|