Beispiel #1
0
 private static Coordinates GetNextCoordinates(Coordinates currentCoordinates, SpiralDirections currentDirection)
 {
     var newCoordinates = new Coordinates { x = currentCoordinates.x, y = currentCoordinates.y };
     switch (currentDirection)
     {
         case SpiralDirections.right:
             newCoordinates.x++;
             break;
         case SpiralDirections.down:
             newCoordinates.y++;
             break;
         case SpiralDirections.left:
             newCoordinates.x--;
             break;
         case SpiralDirections.up:
             newCoordinates.y--;
             break;
     }
     return newCoordinates;
 }
Beispiel #2
0
        public static List<List<int>> GetNumberSpriralGrid(int dimension)
        {
            // build an empty grid
            var totalCells = 0;
            List<List<int>> grid = new List<List<int>>();
            for (int i = 0; i < dimension; i++)
            {
                List<int> row = new List<int>();
                for (var j= 0; j < dimension; j++)
                {
                    row.Add(0);
                    totalCells++;
                }
                grid.Add(row);
            }

            // get the mid point
            var mid = (dimension / 2) + 1;

            var currentCoordinates = new Coordinates { x = mid - 1, y = mid - 1 };
            var currentDirection = SpiralDirections.up;

            grid[currentCoordinates.x][currentCoordinates.y] = 1;

            var currentValue = 2;
            while (currentValue <= totalCells)
            {

                var desiredCoordinates = GetNextCoordinates(currentCoordinates, GetNextDirection(currentDirection));
                var currentCourseCooredinates = GetNextCoordinates(currentCoordinates, currentDirection);

                if (grid[desiredCoordinates.x][desiredCoordinates.y] == 0)
                {
                    grid[desiredCoordinates.x][desiredCoordinates.y] = currentValue;
                    currentCoordinates = desiredCoordinates;
                    currentDirection = GetNextDirection(currentDirection);
                }
                else
                {
                    grid[currentCourseCooredinates.x][currentCourseCooredinates.y] = currentValue;
                    currentCoordinates = currentCourseCooredinates;
                }
                currentValue++;
            }

            return grid;
        }