Ejemplo n.º 1
0
        private void SolveSudoku(object sender, RoutedEventArgs e)
        {
            var sudokuSolver    = new SudokuDifficulty();
            var sudokuValidator = new SudokuSolver();
            var sudokuToSolve   = new SudokuCell[9, 9];

            var counter = 0;

            for (int row = 0; row < 9; row++)
            {
                for (int col = 0; col < 9; col++)
                {
                    var textBox = this.FindName("TextBox" + counter) as TextBox;
                    sudokuToSolve[row, col] = new SudokuCell(row, col);
                    if (textBox.Text != string.Empty)
                    {
                        sudokuToSolve[row, col].Value = int.Parse(textBox.Text);
                    }
                    counter++;
                }
            }

            if (lastSudokuDifficulty == 0)
            {
                MessageBox.Show("You must first generate a sudoku!");
                return;
            }

            if (!sudokuValidator.CheckIfSudokuIsValid(sudokuToSolve))
            {
                MessageBox.Show("This sudoku is not valid! Please check for errors!", "Warning");
                return;
            }

            try
            {
                sudokuToSolve = sudokuSolver.SolveSudoku(sudokuToSolve);
            }
            catch (ArgumentException)
            {
                MessageBox.Show("This sudoku is not valid! Please check for errors!", "Warning");
                return;
            }

            counter = 0;

            for (int row = 0; row < 9; row++)
            {
                for (int col = 0; col < 9; col++)
                {
                    var textBox = this.FindName("TextBox" + counter) as TextBox;
                    textBox.Text      = string.Empty;
                    textBox.Text      = sudokuToSolve[row, col].Value.ToString();
                    textBox.IsEnabled = false;
                    counter++;
                }
            }
            stopWatch.Stop();
        }
Ejemplo n.º 2
0
        private void CheckIfSudokuIsValid(object sender, RoutedEventArgs e)
        {
            var sudokuSolver    = new SudokuDifficulty();
            var sudokuValidator = new SudokuSolver();
            var sudokuToSolve   = new SudokuCell[9, 9];

            var counter = 0;

            for (int row = 0; row < 9; row++)
            {
                for (int col = 0; col < 9; col++)
                {
                    var textBox = this.FindName("TextBox" + counter) as TextBox;
                    sudokuToSolve[row, col] = new SudokuCell(row, col);
                    if (textBox.Text != string.Empty)
                    {
                        sudokuToSolve[row, col].Value = int.Parse(textBox.Text);
                    }
                    counter++;
                }
            }

            if (lastSudokuDifficulty == 0)
            {
                MessageBox.Show("You must first generate a sudoku!");
                return;
            }

            if (!sudokuValidator.CheckIfSudokuIsValid(sudokuToSolve))
            {
                var inputCells = new bool[9, 9];
                var sudoku     = new SudokuCell[9, 9];

                counter = 0;
                for (int row = 0; row < 9; row++)
                {
                    for (int col = 0; col < 9; col++)
                    {
                        var element = this.FindName("TextBox" + counter) as TextBox;
                        int number;
                        var isParsed = int.TryParse(element.Text, out number);
                        sudoku[row, col] = new SudokuCell(row, col);
                        if (isParsed && element.IsReadOnly == false)
                        {
                            sudoku[row, col].Value = number;
                        }
                        else
                        {
                            sudoku[row, col].Value = number;
                            inputCells[row, col]   = true;
                        }
                        counter++;
                    }
                }

                var listWithCellsWithError = sudokuSolver.GetAllCellsWithError(sudoku, inputCells);

                ColorTheCellsWithError(listWithCellsWithError);

                MessageBox.Show("You have some errors!");
                return;
            }

            try
            {
                sudokuToSolve = sudokuSolver.SolveSudoku(sudokuToSolve);
            }
            catch (ArgumentException)
            {
                var inputCells = new bool[9, 9];
                var sudoku     = new SudokuCell[9, 9];

                counter = 0;
                for (int row = 0; row < 9; row++)
                {
                    for (int col = 0; col < 9; col++)
                    {
                        var element = this.FindName("TextBox" + counter) as TextBox;
                        int number;
                        var isParsed = int.TryParse(element.Text, out number);
                        sudoku[row, col] = new SudokuCell(row, col);
                        if (isParsed && element.IsReadOnly == false)
                        {
                            sudoku[row, col].Value = number;
                        }
                        else
                        {
                            sudoku[row, col].Value = number;
                            inputCells[row, col]   = true;
                        }
                        counter++;
                    }
                }

                var listWithCellsWithError = sudokuSolver.GetAllCellsWithError(sudoku, inputCells, false);

                ColorTheCellsWithError(listWithCellsWithError);
                MessageBox.Show("You have some errors!");
                return;
            }

            MessageBox.Show("You are doing great!");
        }