chiark / gitweb /
Pattern: missing special case in the solver.
authorSimon Tatham <anakin@pobox.com>
Sat, 23 Sep 2017 18:17:36 +0000 (19:17 +0100)
committerSimon Tatham <anakin@pobox.com>
Sat, 23 Sep 2017 18:23:10 +0000 (19:23 +0100)
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!

pattern.c

index 9a74e553186bb1b35c3f3f5ac476107423879c08..ece1ed476e562913941b64b6d74409a35a91e9d7 100644 (file)
--- 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);