private static void PrintSpiral ()
{
int number = 3;
int[,] spiralArr = Spiral(number);
for (int i = 0; i < number; i++)
{
for (int j = 0; j < number; j++)
{
Console.Write(spiralArr[i, j] + " ");
}
Console.Write("\n");
}
}
static int[,] Spiral ( int number )
{
var position = new { x = -1, y = 0 };
var directions = new[] {
new { x = 1, y = 0 },
new { x = 0, y = 1 },
new { x = -1, y = 0 },
new { x = 0, y = -1 }
};
var sequence = (
from n in Enumerable.Range(1, number)
from o in Enumerable.Repeat(n, n != number ? 2 : 1)
select o
).Reverse().ToList();
var result = new int[number, number];
int currentValue = 1;
for (int i = 0; i < sequence.Count; i++)
{
var direction = directions[i % directions.Length];
for (int j = 0; j < sequence[i]; j++)
{
position = new
{
x = position.x + direction.x,
y = position.y + direction.y
};
result[position.y, position.x] = currentValue;
currentValue++;
}
}
return result;
}