private void ScanRegion(RegionQueue regions, MutablePuzzle puzzle, Region region) { var placedDigits = region.GetPlacedDigits(); for (int i = 1; i <= Puzzle.LineLength; i++) { var digit = SudokuValues.FromHumanValue(i); if (placedDigits.HasAnyOptions(digit)) { continue; } var positions = region.GetPositions(digit); if (positions.IsSingle) { var index = positions.ToIndex(); var coords = region.GetCoordinate(index); var update = new CellUpdate(digit.Invert(), coords); puzzle.RemoveOptions(update); regions.Enqueue(RegionType.Row, coords.Row); regions.Enqueue(RegionType.Column, coords.Column); regions.Enqueue(RegionType.Box, coords.Box); } } }
private (SudokuValues row, SudokuValues col, SudokuValues box) GetValues(int rowVal, int colVal, int boxVal) { return( SudokuValues.FromHumanValue(rowVal), SudokuValues.FromHumanValue(colVal), SudokuValues.FromHumanValue(boxVal) ); }