diff options
| author | Simon Tatham <anakin@pobox.com> | 2023-06-25 15:20:50 +0100 |
|---|---|---|
| committer | Simon Tatham <anakin@pobox.com> | 2023-06-25 15:40:58 +0100 |
| commit | c5076be383d7630d70666a543306c8f6ee65edb9 (patch) | |
| tree | 1dd4c8e16c297be532d7bfee18a6ee9c46bf9239 | |
| parent | c224416c76e41f284b318adc51f08c3ed11de8e2 (diff) | |
| download | puzzles-c5076be383d7630d70666a543306c8f6ee65edb9.zip puzzles-c5076be383d7630d70666a543306c8f6ee65edb9.tar.gz puzzles-c5076be383d7630d70666a543306c8f6ee65edb9.tar.bz2 puzzles-c5076be383d7630d70666a543306c8f6ee65edb9.tar.xz | |
Keen: fix another misuse of dsf_canonify.
Chris Boyle points out that outline_block_structure has a comment
saying that we're supposed to have picked a square with a boundary to
its left. dsf_canonify no longer guarantees that, but dsf_minimal
does. Switch to using that throughout the function.
'keen --generate 10#12345 --print 5x2' failed an assertion before this
fix, and now doesn't.
| -rw-r--r-- | keen.c | 10 |
1 files changed, 5 insertions, 5 deletions
@@ -2257,7 +2257,7 @@ static void outline_block_structure(drawing *dr, game_drawstate *ds, * Iterate over all the blocks. */ for (i = 0; i < a; i++) { - if (dsf_canonify(dsf, i) != i) + if (dsf_minimal(dsf, i) != i) continue; /* @@ -2296,11 +2296,11 @@ static void outline_block_structure(drawing *dr, game_drawstate *ds, tx = x - dy + dx; ty = y + dx + dy; nin += (tx >= 0 && tx < w && ty >= 0 && ty < w && - dsf_canonify(dsf, ty*w+tx) == i); + dsf_minimal(dsf, ty*w+tx) == i); tx = x - dy; ty = y + dx; nin += (tx >= 0 && tx < w && ty >= 0 && ty < w && - dsf_canonify(dsf, ty*w+tx) == i); + dsf_minimal(dsf, ty*w+tx) == i); if (nin == 0) { /* * Turn right. @@ -2337,9 +2337,9 @@ static void outline_block_structure(drawing *dr, game_drawstate *ds, * somewhere sensible. */ assert(x >= 0 && x < w && y >= 0 && y < w && - dsf_canonify(dsf, y*w+x) == i); + dsf_minimal(dsf, y*w+x) == i); assert(x+dx < 0 || x+dx >= w || y+dy < 0 || y+dy >= w || - dsf_canonify(dsf, (y+dy)*w+(x+dx)) != i); + dsf_minimal(dsf, (y+dy)*w+(x+dx)) != i); /* * Record the point we just went past at one end of the |