Exemplo n.º 1
0
        void UpdateCombinationsRemaining()
        {
            BigInteger numCombos = 1;

            for (int row = 0; row < 9; row++)
            {
                for (int column = 0; column < 9; column++)
                {
                    List <int> numbers = BaseGroupSolver.GetNumbers(SudokuBoard.squares[row, column].Notes);
                    if (numbers.Count > 0)
                    {
                        numCombos *= numbers.Count;
                    }
                }
            }
            if (numCombos == 1)
            {
                numCombos = 0;
            }
            bool weHaveAReasonableNumberOfCombosWeCanSolve = numCombos < 200_000_000;
            bool shouldEnableSolveButtons = alwaysEnableSolveButtons || weHaveAReasonableNumberOfCombosWeCanSolve;

            btnBruteForce.IsEnabled = shouldEnableSolveButtons;
            btnHint.IsEnabled       = shouldEnableSolveButtons;
            Title = $"The number of combinations is {numCombos}!";
        }
Exemplo n.º 2
0
        bool BruteForceAttack(int startingRow = 0, int startingColumn = 0)
        {
            if (startingColumn >= 9)
            {
                startingColumn = 0;
                startingRow++;
            }
            for (int row = startingRow; row < 9; row++)
            {
                for (int column = startingColumn; column < 9; column++)
                {
                    startingColumn = 0;
                    ISudokuSquare sudokuSquare = SudokuBoard.squares[row, column];
                    if (!sudokuSquare.IsEmpty)
                    {
                        continue;
                    }
                    // Magic - I have an empty square!!!
                    if (sudokuSquare.Notes == "")
                    {
                        ShowNotesForSquareAt(sudokuSquare);
                        if (sudokuSquare.Notes == "")                          // That means we have a conflict.
                        {
                            return(BruteForceAttack(row, column + 1));
                        }
                    }

                    List <int> notes = BaseGroupSolver.GetNumbers(sudokuSquare.Notes);

                    foreach (int number in notes)
                    {
                        sudokuSquare.Value        = number.ToString()[0];
                        sudokuSquare.HasTestValue = true;
                        numCombinationsTried++;
                        if (HasConflicts(row, column))
                        {
                            sudokuSquare.Value        = Char.MinValue;
                            sudokuSquare.HasTestValue = false;
                        }
                        else if (BruteForceAttack(row, column + 1))
                        {
                            sudokuSquare.Notes = "";
                            return(true);
                        }
                        else
                        {
                            sudokuSquare.Value        = Char.MinValue;
                            sudokuSquare.HasTestValue = false;
                        }
                    }
                    return(false);
                }
            }

            return(AllSquaresAreFilled());
        }