diff options
| author | Teruaki Kawashima <teru@rockbox.org> | 2009-12-16 11:53:36 +0000 |
|---|---|---|
| committer | Teruaki Kawashima <teru@rockbox.org> | 2009-12-16 11:53:36 +0000 |
| commit | d9002eb94a2f6dcb07b4869303068416b4e5590a (patch) | |
| tree | 8fd87c07786ab78d3212349fa622e442d0722b43 /apps/plugins | |
| parent | 4e89025935fc155d35d1bffb88c028892181f58c (diff) | |
| download | rockbox-d9002eb94a2f6dcb07b4869303068416b4e5590a.zip rockbox-d9002eb94a2f6dcb07b4869303068416b4e5590a.tar.gz rockbox-d9002eb94a2f6dcb07b4869303068416b4e5590a.tar.bz2 rockbox-d9002eb94a2f6dcb07b4869303068416b4e5590a.tar.xz | |
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/plugins')
| -rw-r--r-- | apps/plugins/sudoku/generator.c | 31 | ||||
| -rw-r--r-- | apps/plugins/sudoku/generator.h | 1 | ||||
| -rw-r--r-- | apps/plugins/sudoku/sudoku.c | 19 |
3 files changed, 48 insertions, 3 deletions
diff --git a/apps/plugins/sudoku/generator.c b/apps/plugins/sudoku/generator.c index 59bb906..ba74fa5 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 3caa98e..222a924 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 99b08f2..9e7e969 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) |