Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
        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);
        }
Example #4
0
        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);
        }