chiark / gitweb /
towerssolver: always print solver diagnostics in -v mode.
authorSimon Tatham <anakin@pobox.com>
Mon, 26 Feb 2018 20:49:57 +0000 (20:49 +0000)
committerSimon Tatham <anakin@pobox.com>
Mon, 26 Feb 2018 20:49:57 +0000 (20:49 +0000)
The branch of the code that claimed the puzzle to be ambiguous was not
also re-running the solver with diagnostics enabled, so that if a user
tries to use this tool to hand-design a puzzle, they do not get
feedback on what the multiple legal solutions actually are.

towers.c

index 9ccc6ae1857707ddcba795a30d8b3024c73b97de..30ee4cb1eb1ccfcf5cf950506ba0c0555d02863b 100644 (file)
--- a/towers.c
+++ b/towers.c
@@ -2072,6 +2072,17 @@ int main(int argc, char **argv)
            break;
     }
 
+    if (really_show_working) {
+        /*
+         * Now run the solver again at the last difficulty level we
+         * tried, but this time with diagnostics enabled.
+         */
+        solver_show_working = really_show_working;
+        memcpy(s->grid, s->clues->immutable, p->w * p->w);
+        ret = solver(p->w, s->clues->clues, s->grid,
+                     diff < DIFFCOUNT ? diff : DIFFCOUNT-1);
+    }
+
     if (diff == DIFFCOUNT) {
        if (grade)
            printf("Difficulty rating: ambiguous\n");
@@ -2084,9 +2095,6 @@ int main(int argc, char **argv)
            else
                printf("Difficulty rating: %s\n", towers_diffnames[ret]);
        } else {
-           solver_show_working = really_show_working;
-           memcpy(s->grid, s->clues->immutable, p->w * p->w);
-           ret = solver(p->w, s->clues->clues, s->grid, diff);
            if (ret != diff)
                printf("Puzzle is inconsistent\n");
            else