aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Tatham <anakin@pobox.com>2017-09-23 19:17:36 +0100
committerSimon Tatham <anakin@pobox.com>2017-09-23 19:23:10 +0100
commitb8313181a6104624000e9cc008e8e26b67aeb655 (patch)
treec3e5a2445892865ca49ea41c6766aa3277bfc745
parent61e711178455dbd0ec8f78d15791b7e25fbf7156 (diff)
downloadpuzzles-b8313181a6104624000e9cc008e8e26b67aeb655.zip
puzzles-b8313181a6104624000e9cc008e8e26b67aeb655.tar.gz
puzzles-b8313181a6104624000e9cc008e8e26b67aeb655.tar.bz2
puzzles-b8313181a6104624000e9cc008e8e26b67aeb655.tar.xz
Pattern: missing special case in the solver.
We were filling in a row immediately as all-white if it had no clues at all, but weren't filling in a row as all-black if it had a single clue covering the entire row. Now we do both. In particular, this caused the Pattern solver to be unable to take advantage of one of the two kinds of totally obvious clue across the _easy_ dimension of a trivial 1xN puzzle - and a special case of _that_, as a user pointed out, is that the game generator hangs trying to create a 1x1 puzzle, which ought to be the easiest thing in the world!
-rw-r--r--pattern.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/pattern.c b/pattern.c
index 9a74e55..ece1ed4 100644
--- a/pattern.c
+++ b/pattern.c
@@ -446,6 +446,8 @@ static int do_row(unsigned char *known, unsigned char *deduced,
if (rowlen == 0) {
memset(deduced, DOT, len);
+ } else if (rowlen == 1 && data[0] == len) {
+ memset(deduced, BLOCK, len);
} else {
do_recurse(known, deduced, row, minpos_done, maxpos_done, minpos_ok,
maxpos_ok, data, len, freespace, 0, 0);