Patch from James H to fix the occasional generation of puzzles

harder than requested.

[originally from svn r7113]
This commit is contained in:
Simon Tatham
2007-01-15 20:07:18 +00:00
parent 7a41702606
commit 472deca37c
3 changed files with 59 additions and 40 deletions

View File

@ -631,7 +631,7 @@ static int solver_grid(digit *grid, int o, int maxdiff, void *ctx)
game_solver *solver;
struct latin_solver *lsolver;
struct latin_solver_scratch *scratch;
int ret, diff = DIFF_LATIN, extreme;
int ret, diff = DIFF_LATIN;
assert(maxdiff <= DIFF_RECURSIVE);
@ -668,18 +668,28 @@ cont:
if (maxdiff <= DIFF_EASY)
break;
ret = latin_solver_diff_set(lsolver, scratch, &extreme);
/* Row- and column-wise set elimination */
ret = latin_solver_diff_set(lsolver, scratch, 0);
if (ret < 0) {
diff = DIFF_IMPOSSIBLE;
goto got_result;
} else if (ret > 0) {
diff = max(diff, extreme ? DIFF_EXTREME : DIFF_SET);
diff = max(diff, DIFF_SET);
goto cont;
}
if (maxdiff <= DIFF_SET)
break;
ret = latin_solver_diff_set(lsolver, scratch, 1);
if (ret < 0) {
diff = DIFF_IMPOSSIBLE;
goto got_result;
} else if (ret > 0) {
diff = max(diff, DIFF_EXTREME);
goto cont;
}
/*
* Forcing chains.
*/