summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStijn Buys <ingar@osirion.org>2012-06-15 18:52:40 +0000
committerStijn Buys <ingar@osirion.org>2012-06-15 18:52:40 +0000
commit68da3e6ab18544d43069d8d25d50abadf7267b30 (patch)
treef1e9a376ead133bb11e09d3fa24966ea36d93ac0
parent9b82e566b648d530df7e3fac61cc2e5b694fa24e (diff)
Integrated Cell class, minor refactoring.
-rw-r--r--src/Makefile.am1
-rw-r--r--src/solverwindow.cc17
-rw-r--r--src/sudoku.cc32
-rw-r--r--src/sudoku.h10
-rw-r--r--src/sudokuwidget.cc9
-rw-r--r--src/sudokuwidget.h2
6 files changed, 40 insertions, 31 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index 943ed52..2e1bae4 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -3,6 +3,7 @@ bin_PROGRAMS = sudokusolver
# You have two .cpp files you wrote, editor.cpp and another.cpp
# Remember to include the name of the resource file with the .cpp extension.
sudokusolver_SOURCES = \
+ cell.cc \
main.cc \
mainwindow.cc \
solverwindow.cc \
diff --git a/src/solverwindow.cc b/src/solverwindow.cc
index 06de5fb..23157f4 100644
--- a/src/solverwindow.cc
+++ b/src/solverwindow.cc
@@ -85,7 +85,7 @@ void SolverWindow::load()
for (int column = 0; column < 9 ; column++) {
int i;
textstream >> i;
- sudoku.value(row, column) = i;
+ sudoku.set_value(row, column, i);
}
}
solverwindow_sudokuwidget->set_values(sudoku);
@@ -150,20 +150,21 @@ void SolverWindow::clear()
void SolverWindow::step()
{
- int nbSolutions = 0;
+ int cells_solved = 0;
Sudoku sudoku;
solverwindow_sudokuwidget->get_values(sudoku);
Sudoku solution;
for (int row = 0; row < 9; row++) {
for (int column = 0; column < 9; column++) {
- int i = sudoku.solve_step(row, column);
- if ((i > 0) && (sudoku.value(row, column) == 0)) {
- nbSolutions++;
+ solution.set_value(row, column, sudoku.solve_step(row, column));
+
+ if ((sudoku.value(row, column) == 0) && (solution.value(row, column) > 0)) {
+ cells_solved++;
}
- solution.value(row, column) = i;
+
}
}
solverwindow_sudokuwidget->set_values(solution);
- qDebug() << nbSolutions << " cells solved";
-} \ No newline at end of file
+ qDebug() << cells_solved << " cells solved";
+}
diff --git a/src/sudoku.cc b/src/sudoku.cc
index 13369fe..2725b02 100644
--- a/src/sudoku.cc
+++ b/src/sudoku.cc
@@ -3,18 +3,18 @@
Sudoku::Sudoku()
{
- for (int row = 0; row < 9; row++) {
- for (int column = 0; column < 9; column++) {
- sudoku_value[row][column] = 0;
- }
- }
+}
+
+void Sudoku::set_value(int row, int column, int value)
+{
+ sudoku_cell[row][column].set_value(value);
}
int Sudoku::solve_step(int pos_row, int pos_column)
{
// verify if the cell has already been solved
- if ((sudoku_value[pos_row][pos_column] > 0 ) && (sudoku_value[pos_row][pos_column] <= 9)) {
- return sudoku_value[pos_row][pos_column];
+ if ((value(pos_row,pos_column) > 0 ) && (value(pos_row,pos_column) <= 9)) {
+ return value(pos_row,pos_column);
}
bool possible_solution[9];
@@ -26,18 +26,18 @@ int Sudoku::solve_step(int pos_row, int pos_column)
// eliminate row
for (int column = 0; column < 9; column++) {
if (column != pos_column) {
- int value = sudoku_value[pos_row][column];
- if ((value > 0) && (value <= 9)) {
- possible_solution[value - 1] = false;
+ const int v = value(pos_row,column);
+ if ((v > 0) && (v <= 9)) {
+ possible_solution[v - 1] = false;
}
}
}
// eliminate column
for (int row = 0; row < 9; row++) {
if (row != pos_row) {
- int value = sudoku_value[row][pos_column];
- if ((value > 0) && (value <= 9)) {
- possible_solution[value - 1] = false;
+ const int v = value(row,pos_column);
+ if ((v > 0) && (v <= 9)) {
+ possible_solution[v - 1] = false;
}
}
@@ -49,9 +49,9 @@ int Sudoku::solve_step(int pos_row, int pos_column)
for (int row = grid_row; row < grid_row + 3; row++) {
for (int column = grid_column; column < grid_column + 3; column ++) {
if ((column != pos_column) && (row != pos_row)) {
- int value = sudoku_value[row][column];
- if ((value > 0) && (value <= 9)) {
- possible_solution[value - 1] = false;
+ const int v = value(row, column);
+ if ((v > 0) && (v <= 9)) {
+ possible_solution[v - 1] = false;
}
}
diff --git a/src/sudoku.h b/src/sudoku.h
index afb9f16..a6bf821 100644
--- a/src/sudoku.h
+++ b/src/sudoku.h
@@ -2,6 +2,8 @@
#ifndef __INCLUDED_SUDOKUSOLVER_SUDOKU__
#define __INCLUDED_SUDOKUSOLVER_SUDOKU__
+#include "cell.h"
+
class Sudoku {
public:
@@ -9,18 +11,16 @@ public:
// inspector
inline int value(int row, int column) const {
- return sudoku_value[row][column];
+ return sudoku_cell[row][column].value();
}
// mutator
- inline int & value(int row, int column) {
- return sudoku_value[row][column];
- }
+ void set_value(int row, int column, int value);
int solve_step(int pos_row, int pos_column);
private:
- int sudoku_value[9][9];
+ Cell sudoku_cell[9][9];
};
#endif // __INCLUDED_SUDOKUSOLVER_SUDOKU__
diff --git a/src/sudokuwidget.cc b/src/sudokuwidget.cc
index 742798f..7d756ae 100644
--- a/src/sudokuwidget.cc
+++ b/src/sudokuwidget.cc
@@ -23,6 +23,11 @@ SudokuWidget::SudokuWidget()
setLayout(gridlayout);
}
+QSize SudokuWidget::sizeHint () const
+{
+ return QSize(512, 512);
+}
+
void SudokuWidget::set_values(const Sudoku & values)
{
for (int row = 0; row < 9; row++) {
@@ -46,9 +51,9 @@ void SudokuWidget::get_values(Sudoku & values)
QString str(sudokuwidget_value[row][column]->text());
int i = str.toInt(&ok);
if (ok && (i > 0) && (i <= 9)) {
- values.value(row, column) = i;
+ values.set_value(row, column, i);
} else {
- values.value(row, column) = 0;
+ values.set_value(row, column, 0);
}
}
}
diff --git a/src/sudokuwidget.h b/src/sudokuwidget.h
index 06d1b6f..c96df7d 100644
--- a/src/sudokuwidget.h
+++ b/src/sudokuwidget.h
@@ -25,6 +25,8 @@ public:
* @brief set sudoku values from widget values
* */
void get_values(Sudoku & values);
+
+ virtual QSize sizeHint() const;
private:
QLineEdit * sudokuwidget_value[9][9];