diff options
Diffstat (limited to 'src/solverwindow.cc')
-rw-r--r-- | src/solverwindow.cc | 47 |
1 files changed, 43 insertions, 4 deletions
diff --git a/src/solverwindow.cc b/src/solverwindow.cc index feace77..33ca7c2 100644 --- a/src/solverwindow.cc +++ b/src/solverwindow.cc @@ -9,6 +9,7 @@ #include <QVBoxLayout> #include <QPushButton> +#include <cstdlib> /* * FIXME * On windows, this results in a rather awkward directory. @@ -33,7 +34,7 @@ SolverWindow::SolverWindow() // add save button QPushButton *savebutton = new QPushButton(tr("Save")); sidebarlayout->addWidget(savebutton); - connect(savebutton, SIGNAL(clicked()), this, SLOT(save())); + connect(savebutton, SIGNAL(clicked()), this, SLOT(saveas())); // add revert button QPushButton *revertbutton = new QPushButton(tr("Revert")); @@ -65,8 +66,7 @@ SolverWindow::SolverWindow() // add sidebar layout windowlayout->addLayout(sidebarlayout); - - + // sudoku widget solverwindow_sudokuwidget = new SudokuWidget(); windowlayout->addWidget(solverwindow_sudokuwidget, 1); @@ -122,7 +122,7 @@ void SolverWindow::revert() solverwindow_sudokuwidget->set_values(solverwindow_revertstate); } -void SolverWindow::save() +void SolverWindow::saveas() { QString filename = QFileDialog::getSaveFileName(this, tr("Save as..."), HOMEDIR, "Sudoku (*.sudoku)"); if (filename.isEmpty()) { @@ -175,6 +175,45 @@ void SolverWindow::clear() solverwindow_sudokuwidget->set_values(sudoku); } +void SolverWindow::step() +{ + Sudoku sudoku; + solverwindow_sudokuwidget->get_values(sudoku); + + Sudoku solution(sudoku); + int solved = solution.solve(); + if (solved == 0) { + qDebug() << "no solveable cells left!"; + return; + } + + // compare sudoku and solution values + int index_start = (int) random() % 81; // TODO this should be a random number from 0 to 80 + int index_current = index_start; + do { + int column = index_current % 9; + int row = (index_current - column) / 9; + if ((sudoku.cell(row,column).value() == 0) && (solution.cell(row,column).value() != 0)) { + sudoku.cell(row,column).set_value(solution.cell(row, column).value()); + solverwindow_sudokuwidget->set_values(sudoku); + return; + } + + index_current = (index_current + 1) % 81; + + } while (index_current != index_start); + +} + +void SolverWindow::solve() +{ + Sudoku sudoku; + solverwindow_sudokuwidget->get_values(sudoku); + int solved = sudoku.solve(); + solverwindow_sudokuwidget->set_values(sudoku); + qDebug() << solved << " cells solved"; +} + void SolverWindow::step_constraints() { Sudoku sudoku; |