aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--solo.c30
1 files changed, 24 insertions, 6 deletions
diff --git a/solo.c b/solo.c
index ef2852f..dd04cdf 100644
--- a/solo.c
+++ b/solo.c
@@ -1013,12 +1013,23 @@ static int solver_set(struct solver_usage *usage,
/*
* If count == 0, then there's a row with no 1s at all and
- * the puzzle is internally inconsistent. However, we ought
- * to have caught this already during the simpler reasoning
- * methods, so we can safely fail an assertion if we reach
- * this point here.
+ * the puzzle is internally inconsistent.
*/
- assert(count > 0);
+ if (count == 0) {
+#ifdef STANDALONE_SOLVER
+ if (solver_show_working) {
+ va_list ap;
+ printf("%*s", solver_recurse_depth*4,
+ "");
+ va_start(ap, fmt);
+ vprintf(fmt, ap);
+ va_end(ap);
+ printf(":\n%*s solver_set: impossible on entry\n",
+ solver_recurse_depth*4, "");
+ }
+#endif
+ return -1;
+ }
if (count == 1)
rowidx[i] = colidx[first] = FALSE;
}
@@ -1465,7 +1476,14 @@ static int solver_killer_sums(struct solver_usage *usage, int b,
assert(nsquares == 0);
return 0;
}
- assert(nsquares > 0);
+ if (nsquares == 0) {
+#ifdef STANDALONE_SOLVER
+ if (solver_show_working)
+ printf("%*skiller: cage has no usable squares left\n",
+ solver_recurse_depth*4, "");
+#endif
+ return -1;
+ }
if (nsquares < 2 || nsquares > 4)
return 0;