From 472deca37cef4e5f5c8cd865406fab71a44d0668 Mon Sep 17 00:00:00 2001 From: Simon Tatham Date: Mon, 15 Jan 2007 20:07:18 +0000 Subject: Patch from James H to fix the occasional generation of puzzles harder than requested. [originally from svn r7113] --- unequal.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) (limited to 'unequal.c') diff --git a/unequal.c b/unequal.c index 74eba79..81720e4 100644 --- a/unequal.c +++ b/unequal.c @@ -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. */ -- cgit v1.1