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); }
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); }
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); }
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); }
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); }
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); }