shithub: puzzles

Download patch

ref: 2270ee116d2c3ee406cb8c65ac58051664107c42
parent: 43b9eb1472d2a82e5369815511a9ae6681a61a08
author: Simon Tatham <[email protected]>
date: Mon Feb 26 15:49:14 EST 2018

latin.c: dump every solution found during recursion.

In solver_show_working mode, we were logging all the deductions,
guesswork and backtracking, but not printing out the actual solution
(if any) reached at the end of each branch of the tree.

--- a/latin.c
+++ b/latin.c
@@ -964,13 +964,30 @@
     got_result:
 
 #ifdef STANDALONE_SOLVER
-    if (solver_show_working)
-        printf("%*s%s found\n",
-               solver_recurse_depth*4, "",
-               diff == diff_impossible ? "no solution (impossible)" :
-               diff == diff_unfinished ? "no solution (unfinished)" :
-               diff == diff_ambiguous ? "multiple solutions" :
-               "one solution");
+    if (solver_show_working) {
+        if (diff != diff_impossible && diff != diff_unfinished &&
+            diff != diff_ambiguous) {
+            int x, y;
+
+            printf("%*sone solution found:\n", solver_recurse_depth*4, "");
+
+            for (y = 0; y < solver->o; y++) {
+                printf("%*s", solver_recurse_depth*4+1, "");
+                for (x = 0; x < solver->o; x++) {
+                    int val = solver->grid[y*solver->o+x];
+                    assert(val);
+                    printf(" %s", solver->names[val-1]);
+                }
+                printf("\n");
+            }
+        } else {
+            printf("%*s%s found\n",
+                   solver_recurse_depth*4, "",
+                   diff == diff_impossible ? "no solution (impossible)" :
+                   diff == diff_unfinished ? "no solution (unfinished)" :
+                   "multiple solutions");
+        }
+    }
 #endif
 
     latin_solver_free_scratch(scratch);