summaryrefslogtreecommitdiff
path: root/apps/plugins/puzzles/src/solo.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/plugins/puzzles/src/solo.c')
-rw-r--r--apps/plugins/puzzles/src/solo.c30
1 files changed, 24 insertions, 6 deletions
diff --git a/apps/plugins/puzzles/src/solo.c b/apps/plugins/puzzles/src/solo.c
index ef2852f1d9..dd04cdf281 100644
--- a/apps/plugins/puzzles/src/solo.c
+++ b/apps/plugins/puzzles/src/solo.c
@@ -1013,12 +1013,23 @@ static int solver_set(struct solver_usage *usage,
1013 1013
1014 /* 1014 /*
1015 * If count == 0, then there's a row with no 1s at all and 1015 * If count == 0, then there's a row with no 1s at all and
1016 * the puzzle is internally inconsistent. However, we ought 1016 * the puzzle is internally inconsistent.
1017 * to have caught this already during the simpler reasoning
1018 * methods, so we can safely fail an assertion if we reach
1019 * this point here.
1020 */ 1017 */
1021 assert(count > 0); 1018 if (count == 0) {
1019#ifdef STANDALONE_SOLVER
1020 if (solver_show_working) {
1021 va_list ap;
1022 printf("%*s", solver_recurse_depth*4,
1023 "");
1024 va_start(ap, fmt);
1025 vprintf(fmt, ap);
1026 va_end(ap);
1027 printf(":\n%*s solver_set: impossible on entry\n",
1028 solver_recurse_depth*4, "");
1029 }
1030#endif
1031 return -1;
1032 }
1022 if (count == 1) 1033 if (count == 1)
1023 rowidx[i] = colidx[first] = FALSE; 1034 rowidx[i] = colidx[first] = FALSE;
1024 } 1035 }
@@ -1465,7 +1476,14 @@ static int solver_killer_sums(struct solver_usage *usage, int b,
1465 assert(nsquares == 0); 1476 assert(nsquares == 0);
1466 return 0; 1477 return 0;
1467 } 1478 }
1468 assert(nsquares > 0); 1479 if (nsquares == 0) {
1480#ifdef STANDALONE_SOLVER
1481 if (solver_show_working)
1482 printf("%*skiller: cage has no usable squares left\n",
1483 solver_recurse_depth*4, "");
1484#endif
1485 return -1;
1486 }
1469 1487
1470 if (nsquares < 2 || nsquares > 4) 1488 if (nsquares < 2 || nsquares > 4)
1471 return 0; 1489 return 0;