aboutsummaryrefslogtreecommitdiff
path: root/unequal.c
diff options
context:
space:
mode:
authorSimon Tatham <anakin@pobox.com>2007-01-15 20:07:18 +0000
committerSimon Tatham <anakin@pobox.com>2007-01-15 20:07:18 +0000
commit472deca37cef4e5f5c8cd865406fab71a44d0668 (patch)
tree7adf0d497857fb7368817d2303e98cc81fb8a5e5 /unequal.c
parent7a4170260687cfbbc0481e725a046afb5cbf4663 (diff)
downloadpuzzles-472deca37cef4e5f5c8cd865406fab71a44d0668.zip
puzzles-472deca37cef4e5f5c8cd865406fab71a44d0668.tar.gz
puzzles-472deca37cef4e5f5c8cd865406fab71a44d0668.tar.bz2
puzzles-472deca37cef4e5f5c8cd865406fab71a44d0668.tar.xz
Patch from James H to fix the occasional generation of puzzles
harder than requested. [originally from svn r7113]
Diffstat (limited to 'unequal.c')
-rw-r--r--unequal.c16
1 files changed, 13 insertions, 3 deletions
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.
*/