Index: apps/plugins/sudoku/generator.c =================================================================== --- apps/plugins/sudoku/generator.c (revision 23629) +++ apps/plugins/sudoku/generator.c (working copy) @@ -1153,3 +1153,34 @@ *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 (1 || 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; +} Index: apps/plugins/sudoku/sudoku.c =================================================================== --- apps/plugins/sudoku/sudoku.c (revision 23630) +++ apps/plugins/sudoku/sudoku.c (working copy) @@ -277,6 +277,10 @@ #define YOFS ((LCD_HEIGHT-BOARD_HEIGHT)/2) #endif +#define BLOCK 3 +#define SIZE (BLOCK*BLOCK) + +#if 0 /****** Solver routine by Tom Shackell Downloaded from: @@ -289,9 +293,6 @@ typedef unsigned int Bitset; -#define BLOCK 3 -#define SIZE (BLOCK*BLOCK) - #define true 1 #define false 0 @@ -515,49 +516,13 @@ } /******** END OF IMPORTED CODE */ +#endif /* 0 */ - -/* A wrapper function between the Sudoku plugin and the above solver code */ void sudoku_solve(struct sudoku_state_t* state) { - bool ret; - Stats stats; - Options options; - Sudoku sud; - bool original; - int r,c; - - /* Initialise the parameters */ - sudoku_init(&sud); - rb->memset(&stats,0,sizeof(stats)); - options.allSolutions=false; - options.uniquenessCheck=false; + bool ret = sudoku_solve_board(state); - /* Convert Rockbox format into format for solver */ - for (r=0;r<9;r++) { - for (c=0;c<9;c++) { - if (state->startboard[r][c]!='0') { - sudoku_set(&sud, c, r, state->startboard[r][c]-'0', true); - } - } - } - - /* need to check for degenerate input problems ... */ - if (is_valid(&sud)){ - ret = solve(&sud, &stats, &options); - } else { - ret = false; - } - - if (ret) { - /* Populate the board with the solution. */ - for (r=0;r<9;r++) { - for (c=0;c<9;c++) { - state->currentboard[r][c]='0'+ - sudoku_get(&sud, c, r, &original); - } - } - } else { + if (!ret) { rb->splash(HZ*2, "Solve failed"); } Index: apps/plugins/sudoku/generator.h =================================================================== --- apps/plugins/sudoku/generator.h (revision 23629) +++ apps/plugins/sudoku/generator.h (working copy) @@ -1 +1,2 @@ bool sudoku_generate_board(struct sudoku_state_t* state, char** difficulty); +bool sudoku_solve_board(struct sudoku_state_t* state);