C# Almost Magic Square
static int[] AlmostMagicSquare(int[] a)
{
var rowSum = new int[3];
var colSum = new int[3];
var maxSum = 0;
var grid = new int[3][];
for (int i = 0; i < 3; i++)
{
grid[i] = new[] { a[i * 3], a[i * 3 + 1], a[i * 3 + 2] };
}
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
rowSum[i] += grid[i][j];
colSum[i] += grid[j][i];
}
}
for (int k = 0; k < 3; k++)
{
maxSum = Math.Max(maxSum, rowSum[k]);
maxSum = Math.Max(maxSum, colSum[k]);
}
for (int i = 0, j = 0; i < 3 && j < 3;)
{
var diff = Math.Min(maxSum - rowSum[i], maxSum - colSum[j]);
grid[i][j] += diff;
rowSum[i] += diff;
colSum[j] += diff;
if (rowSum[i] == maxSum)
{
i++;
}
if (colSum[j] == maxSum)
{
j++;
}
}
var result = new int[9];
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
result[i * 3 + j] = grid[i][j];
}
}
return result;
}
This adjusts the matrix toward a matching target sum so the rows and columns line up more like a magic square.