summaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
authorTeruaki Kawashima <teru@rockbox.org>2009-12-16 11:53:36 +0000
committerTeruaki Kawashima <teru@rockbox.org>2009-12-16 11:53:36 +0000
commitd9002eb94a2f6dcb07b4869303068416b4e5590a (patch)
tree8fd87c07786ab78d3212349fa622e442d0722b43 /apps
parent4e89025935fc155d35d1bffb88c028892181f58c (diff)
downloadrockbox-d9002eb94a2f6dcb07b4869303068416b4e5590a.tar.gz
rockbox-d9002eb94a2f6dcb07b4869303068416b4e5590a.zip
sudoku: fix FS#7772: Sudoku: "Solve" Crash.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@24024 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps')
-rw-r--r--apps/plugins/sudoku/generator.c31
-rw-r--r--apps/plugins/sudoku/generator.h1
-rw-r--r--apps/plugins/sudoku/sudoku.c19
3 files changed, 48 insertions, 3 deletions
diff --git a/apps/plugins/sudoku/generator.c b/apps/plugins/sudoku/generator.c
index 59bb9066cc..ba74fa5b08 100644
--- a/apps/plugins/sudoku/generator.c
+++ b/apps/plugins/sudoku/generator.c
@@ -1153,3 +1153,34 @@ bool sudoku_generate_board(struct sudoku_state_t* state, char** difficulty)
*difficulty = classify( );
return true;
}
+
+bool sudoku_solve_board(struct sudoku_state_t* state)
+{
+ bool ret;
+ int r,c,i;
+
+ reset( );
+ i=0;
+ for (r=0;r<9;r++) {
+ for (c=0;c<9;c++) {
+ if( state->startboard[r][c]!='0' )
+ {
+ fill( i, state->startboard[r][c] - '0' );
+ }
+ i++;
+ }
+ }
+
+ ret = ( 0 == solve( ) && 81 == idx_history );
+
+ if (ret) {
+ i=0;
+ for (r=0;r<9;r++) {
+ for (c=0;c<9;c++) {
+ state->currentboard[r][c]='0'+GET_DIGIT( board[ i ] );
+ i++;
+ }
+ }
+ }
+ return ret;
+}
diff --git a/apps/plugins/sudoku/generator.h b/apps/plugins/sudoku/generator.h
index 3caa98ee19..222a9247b2 100644
--- a/apps/plugins/sudoku/generator.h
+++ b/apps/plugins/sudoku/generator.h
@@ -1 +1,2 @@
bool sudoku_generate_board(struct sudoku_state_t* state, char** difficulty);
+bool sudoku_solve_board(struct sudoku_state_t* state);
diff --git a/apps/plugins/sudoku/sudoku.c b/apps/plugins/sudoku/sudoku.c
index 99b08f21a9..9e7e969eee 100644
--- a/apps/plugins/sudoku/sudoku.c
+++ b/apps/plugins/sudoku/sudoku.c
@@ -283,6 +283,10 @@ static unsigned int cellypos[9]={
#define YOFS ((LCD_HEIGHT-BOARD_HEIGHT)/2)
#endif
+#define BLOCK 3
+#define SIZE (BLOCK*BLOCK)
+
+#if 0
/****** Solver routine by Tom Shackell <shackell@cs.york.ac.uk>
Downloaded from:
@@ -295,9 +299,6 @@ Released under GPLv2
typedef unsigned int Bitset;
-#define BLOCK 3
-#define SIZE (BLOCK*BLOCK)
-
#define true 1
#define false 0
@@ -569,6 +570,18 @@ void sudoku_solve(struct sudoku_state_t* state)
return;
}
+#endif /* 0 */
+
+void sudoku_solve(struct sudoku_state_t* state)
+{
+ bool ret = sudoku_solve_board(state);
+
+ if (!ret) {
+ rb->splash(HZ*2, "Solve failed");
+ }
+
+ return;
+}
/* Copies the current to the saved board */
static void save_state(struct sudoku_state_t *state)