diff options
| author | Simon Tatham <anakin@pobox.com> | 2010-03-21 08:48:29 +0000 |
|---|---|---|
| committer | Simon Tatham <anakin@pobox.com> | 2010-03-21 08:48:29 +0000 |
| commit | 5627dc4049915e3b05f74ac87e36503f6f3fc62d (patch) | |
| tree | e887d9a3bb1a5c75afb29f2bfdead3a08153c055 | |
| parent | d437253eca0341b5bcf6b459483ecd2cc6066164 (diff) | |
| download | puzzles-5627dc4049915e3b05f74ac87e36503f6f3fc62d.zip puzzles-5627dc4049915e3b05f74ac87e36503f6f3fc62d.tar.gz puzzles-5627dc4049915e3b05f74ac87e36503f6f3fc62d.tar.bz2 puzzles-5627dc4049915e3b05f74ac87e36503f6f3fc62d.tar.xz | |
Error highlighting bug in Bridges: when counting the number of extra
bridges that could go to an island, the game was not correctly
accounting for existing bridges in all circumstances.
(E.g. in 7x7m2:2a6a2a1g4a6c4i1a1h23c2b, connect the top right 1 to
the 2 left of it, and the 6 left of that correctly lights up red.
But now connect the 6 to the 6 below it, and it wrongly unlights
again.)
[originally from svn r8905]
| -rw-r--r-- | bridges.c | 21 |
1 files changed, 18 insertions, 3 deletions
@@ -542,9 +542,24 @@ static int island_impossible(struct island *is, int strict) assert(is_orth); ifree = is_orth->count - island_countbridges(is_orth); - if (ifree > 0) - nsurrspc += min(ifree, MAXIMUM(is->state, dx, - is->adj.points[i].x, is->adj.points[i].y)); + if (ifree > 0) { + /* + * ifree is the number of bridges unfilled in the other + * island, which is clearly an upper bound on the number + * of extra bridges this island may run to it. + * + * Another upper bound is the number of bridges unfilled + * on the specific line between here and there. We must + * take the minimum of both. + */ + int bmax = MAXIMUM(is->state, dx, + is->adj.points[i].x, is->adj.points[i].y); + int bcurr = GRIDCOUNT(is->state, + is->adj.points[i].x, is->adj.points[i].y, + dx ? G_LINEH : G_LINEV); + assert(bcurr <= bmax); + nsurrspc += min(ifree, bmax - bcurr); + } } if (nsurrspc < nspc) { debug(("island at (%d,%d) impossible: surr. islands %d spc, need %d.\n", |