Ben Harris 875f0af21f Avoid invalid moves when solving Tracks
The solver, when it decided that an edge or square should be both TRACK
and NOTRACK, would correctly decide that the puzzle was insoluble, but
would also mark the edge with both flags in its working copy.  This
could then lead to assertion violations if that working copy of the
board was used for something else, for instance if it was fed back into
the solver.  This couldn't happen in normal play, since failed solutions
just cause the solve command to fail, but the diagnostic "H" command
could trigger it from a save file, causing an assertion failure:
"state->sflags[y*state->p.w + x] & S_CLUE".

Now when the solver runs into this situation, it marks the puzzle as
insoluble but doesn't set the invalid flag, so the board remains valid
and future solve operations are safe.

This save file is the one that demonstrated the problem:

SAVEFILE:41:Simon Tatham's Portable Puzzle Collection
GAME    :12:Train Tracks
PARAMS  :5:6x6t0
CPARAMS :5:6x6t0
DESC    :31:b0t9l,,S0,00,0,0,4,0,0,S0,0,0,0
NSTATES :1:8
STATEPOS:1:2
MOVE    :1:H
MOVE    :1:H
MOVE    :1:H
MOVE    :1:H
MOVE    :1:H
MOVE    :1:H
MOVE    :1:H
2023-02-01 21:28:35 +00:00
2023-01-23 23:50:39 +00:00
2021-04-25 09:59:15 +01:00
2023-01-31 23:25:05 +00:00
2023-01-31 23:25:05 +00:00
2018-11-13 21:48:24 +00:00
2023-01-31 23:25:05 +00:00
2023-01-31 23:25:05 +00:00
2023-01-31 23:25:05 +00:00
2023-01-31 23:25:05 +00:00
2023-01-16 10:43:41 +00:00
2023-01-15 20:59:22 +00:00
2023-01-15 16:24:27 +00:00
2023-01-15 16:24:27 +00:00
2023-01-31 23:25:05 +00:00
2023-01-31 23:25:05 +00:00
2023-01-31 23:25:05 +00:00
2023-01-31 23:25:05 +00:00
2021-03-29 19:02:23 +01:00
2018-11-13 21:48:24 +00:00
2023-01-31 23:25:05 +00:00
2023-01-31 23:25:05 +00:00
2023-01-31 23:25:05 +00:00
2018-11-13 21:48:24 +00:00
2023-01-16 10:46:13 +00:00
2023-01-31 23:25:05 +00:00
2018-11-13 21:48:24 +00:00
2023-01-31 23:25:05 +00:00
2023-01-31 23:25:05 +00:00
2023-01-31 23:25:05 +00:00
2017-09-20 18:03:44 +01:00
2023-02-01 00:40:07 +00:00
2021-05-21 09:10:53 +01:00
2023-01-31 23:25:05 +00:00
2021-03-29 19:02:23 +01:00
2023-01-31 23:25:05 +00:00
2023-01-31 23:25:05 +00:00
2023-01-31 23:25:05 +00:00
2023-01-31 23:25:05 +00:00
2023-01-31 23:25:05 +00:00
2018-11-13 21:48:24 +00:00
2023-01-31 23:25:05 +00:00
2023-01-31 23:25:05 +00:00
2023-01-31 23:25:05 +00:00
2023-01-31 23:25:05 +00:00
2023-01-31 23:25:05 +00:00
2023-01-31 23:25:05 +00:00
2017-05-07 16:25:56 +01:00

This is the README accompanying the source code to Simon Tatham's
puzzle collection. The collection's web site is at
<https://www.chiark.greenend.org.uk/~sgtatham/puzzles/>.

The puzzle collection is built using CMake <https://cmake.org/>. To
compile in the simplest way (on any of Linux, Windows or Mac), run
these commands in the source directory:

  cmake .
  cmake --build .

The manual is provided in Windows Help format for the Windows build;
in text format for anyone who needs it; and in HTML for the Mac OS X
application and for the web site. It is generated from a Halibut
source file (puzzles.but), which is the preferred form for
modification. To generate the manual in other formats, rebuild it,
or learn about Halibut, visit the Halibut website at
<https://www.chiark.greenend.org.uk/~sgtatham/halibut/>.
Description
No description provided
Readme 26 MiB
Languages
C 93.3%
JavaScript 1.4%
Objective-C 1.1%
CMake 1.1%
HTML 0.8%
Other 2.2%