private static CellsInfo ScanCells(Grid grid, GridPoint[] cells) { CellsInfo cellsInfo = new CellsInfo(); NumbersBinary allNumbers = NumbersBinaryHelper.CreateForRange(Defs.MinNumber, Defs.MaxNumber); NumbersBinary result = cells.Where(cell => grid[cell] != 0).Aggregate(allNumbers, (numbers, cell) => numbers.UseNumber(grid[cell])); foreach (GridPoint cell in cells.Where(cell => grid[cell] == 0)) { cellsInfo.Data[cell] = result; } return(cellsInfo); }
public NumbersInfo Create(CellsInfo cellsInfo) { if (cellsInfo == null) { throw new ArgumentNullException(nameof(cellsInfo)); } NumbersInfo numbersInfo = new NumbersInfo(); foreach (KeyValuePair <GridPoint, NumbersBinary> cellInfo in cellsInfo.Data) { Process(numbersInfo, cellInfo.Key, cellInfo.Value); } return(numbersInfo); }
public CellsInfo CreateForRow(Grid grid, Int32 row) { if (grid == null) { throw new ArgumentNullException(nameof(grid)); } if (row < 1 || row > grid.RowCount) { throw new ArgumentOutOfRangeException(nameof(row)); } CellsInfo cellsInfo = grid.ScanRow(row); foreach (GridPoint cell in cellsInfo.Data.Keys.ToArray()) { NumbersBinary numbers = cellsInfo.Data[cell].AppendColumn(grid, cell.Column).AppendSquare(grid, cell); cellsInfo.Data[cell] = numbers; } return(cellsInfo); }
public CellsInfo CreateForSquare(Grid grid, GridPoint point) { if (grid == null) { throw new ArgumentNullException(nameof(grid)); } if (point.Row > grid.RowCount || point.Column > grid.ColumnCount) { throw new ArgumentOutOfRangeException(nameof(point)); } CellsInfo cellsInfo = grid.ScanSquare(point); foreach (GridPoint cell in cellsInfo.Data.Keys.ToArray()) { NumbersBinary number = cellsInfo.Data[cell].AppendRow(grid, cell.Row).AppendColumn(grid, cell.Column); cellsInfo.Data[cell] = number; } return(cellsInfo); }