Magic squares of doubly even order: Difference between revisions
Content added Content deleted
(→{{header|AppleScript}}: Updated primitives) |
(→{{header|Csharp}}: added C#) |
||
Line 460: | Line 460: | ||
57 7 6 60 61 3 2 64 |
57 7 6 60 61 3 2 64 |
||
</pre> |
</pre> |
||
=={{header|C#}}== |
|||
{{trans|Java}} |
|||
<lang csharp>using System; |
|||
namespace MagicSquareDoublyEven |
|||
{ |
|||
class Program |
|||
{ |
|||
static void Main(string[] args) |
|||
{ |
|||
int n = 8; |
|||
var result = MagicSquareDoublyEven(n); |
|||
for (int i = 0; i < result.GetLength(0); i++) |
|||
{ |
|||
for (int j = 0; j < result.GetLength(1); j++) |
|||
Console.Write("{0,2} ", result[i, j]); |
|||
Console.WriteLine(); |
|||
} |
|||
Console.WriteLine("\nMagic constant: {0} ", (n * n + 1) * n / 2); |
|||
Console.ReadLine(); |
|||
} |
|||
private static int[,] MagicSquareDoublyEven(int n) |
|||
{ |
|||
if (n < 4 || n % 4 != 0) |
|||
throw new ArgumentException("base must be a positive " |
|||
+ "multiple of 4"); |
|||
// pattern of count-up vs count-down zones |
|||
int bits = 0b1001_0110_0110_1001; |
|||
int size = n * n; |
|||
int mult = n / 4; // how many multiples of 4 |
|||
int[,] result = new int[n, 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> |
|||
<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|Elixir}}== |
=={{header|Elixir}}== |