示例#1
0
        private static RectangleDimension GetRectangleDim(char rectangle, char[,] grid)
        {
            var dimRect = new RectangleDimension();

            var firstPosition = true;

            for (var y = 0; y < gridLenghtY; y++)
            {
                for (var x = 0; x < gridLenghtX; x++)
                {
                    if (grid[y, x] != rectangle)
                    {
                        continue;
                    }
                    if (firstPosition)
                    {
                        firstPosition = false;
                        dimRect.XMin  = x;
                        dimRect.YMin  = y;
                    }

                    dimRect.XMax = x;
                    dimRect.YMax = y;
                }
            }

            return(dimRect);
        }
示例#2
0
 private static bool CanGoDown(RectangleDimension dimension, char[,] grid)
 {
     if (dimension.YMax + 1 >= gridLenghtY)
     {
         return(false);
     }
     for (var x = dimension.XMin; x <= dimension.XMax; x++)
     {
         if (grid[dimension.YMax + 1, x] != 'A')
         {
             return(false);
         }
     }
     return(true);
 }
示例#3
0
 private static bool CanGoUp(RectangleDimension dimension, char[,] grid)
 {
     if (dimension.YMin - 1 < 0)
     {
         return(false);
     }
     for (var x = dimension.XMin; x <= dimension.XMax; x++)
     {
         if (grid[dimension.YMin - 1, x] != 'A')
         {
             return(false);
         }
     }
     return(true);
 }
示例#4
0
 private static bool CanGoRight(RectangleDimension dimension, char[,] grid)
 {
     if (dimension.XMax + 1 >= gridLenghtX)
     {
         return(false);
     }
     for (var y = dimension.YMin; y <= dimension.YMax; y++)
     {
         if (grid[y, dimension.XMax + 1] != 'A')
         {
             return(false);
         }
     }
     return(true);
 }
示例#5
0
 private static bool CanGoLeft(RectangleDimension dimension, char[,] grid)
 {
     if (dimension.XMin - 1 < 0)
     {
         return(false);
     }
     for (var y = dimension.YMin; y <= dimension.YMax; y++)
     {
         if (grid[y, dimension.XMin - 1] != 'A')
         {
             return(false);
         }
     }
     return(true);
 }
示例#6
0
        private static IEnumerable <(char[, ] position, char direction)> GetNextPositionsByMovingOneRectangle(RectangleDimension rectangleDimension, char[,] grid)
        {
            var NextPositions = new List <(char[, ] position, char direction)>();

            if (CanGoLeft(rectangleDimension, grid))
            {
                var nextGrid = (char[, ])grid.Clone();
                for (var y = rectangleDimension.YMin; y <= rectangleDimension.YMax; y++)
                {
                    nextGrid[y, rectangleDimension.XMin - 1] = nextGrid[y, rectangleDimension.XMin];
                    nextGrid[y, rectangleDimension.XMax]     = 'A';

                    NextPositions.Add((nextGrid, 'L'));
                }
            }

            if (CanGoRight(rectangleDimension, grid))
            {
                var nextGrid = (char[, ])grid.Clone();
                for (var y = rectangleDimension.YMin; y <= rectangleDimension.YMax; y++)
                {
                    nextGrid[y, rectangleDimension.XMax + 1] = nextGrid[y, rectangleDimension.XMax];
                    nextGrid[y, rectangleDimension.XMin]     = 'A';
                    NextPositions.Add((nextGrid, 'R'));
                }
            }

            if (CanGoUp(rectangleDimension, grid))
            {
                var nextGrid = (char[, ])grid.Clone();
                for (var x = rectangleDimension.XMin; x <= rectangleDimension.XMax; x++)
                {
                    nextGrid[rectangleDimension.YMin - 1, x] = nextGrid[rectangleDimension.YMin, x];
                    nextGrid[rectangleDimension.YMax, x]     = 'A';
                    NextPositions.Add((nextGrid, 'U'));
                }
            }

            if (CanGoDown(rectangleDimension, grid))
            {
                var nextGrid = (char[, ])grid.Clone();
                for (var x = rectangleDimension.XMin; x <= rectangleDimension.XMax; x++)
                {
                    nextGrid[rectangleDimension.YMax + 1, x] = nextGrid[rectangleDimension.YMax, x];
                    nextGrid[rectangleDimension.YMin, x]     = 'A';
                    NextPositions.Add((nextGrid, 'D'));
                }
            }

            return(NextPositions);
        }