diff options
| author | Simon Tatham <anakin@pobox.com> | 2007-01-15 20:07:18 +0000 |
|---|---|---|
| committer | Simon Tatham <anakin@pobox.com> | 2007-01-15 20:07:18 +0000 |
| commit | 472deca37cef4e5f5c8cd865406fab71a44d0668 (patch) | |
| tree | 7adf0d497857fb7368817d2303e98cc81fb8a5e5 /unequal.c | |
| parent | 7a4170260687cfbbc0481e725a046afb5cbf4663 (diff) | |
| download | puzzles-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.c | 16 |
1 files changed, 13 insertions, 3 deletions
@@ -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. */ |