simon-git: puzzles (main): Ben Harris

Commits to Tartarus hosted VCS tartarus-commits at lists.tartarus.org
Wed Feb 1 21:56:15 GMT 2023


TL;DR:
  875f0af Avoid invalid moves when solving Tracks

Repository:     https://git.tartarus.org/simon/puzzles.git
On the web:     https://git.tartarus.org/?p=simon/puzzles.git
Branch updated: main
Committer:      Ben Harris <bjh21 at bjh21.me.uk>
Date:           2023-02-01 21:56:15

commit 875f0af21fbced5cbf6cf63b86fe3dc51682c863
web diff https://git.tartarus.org/?p=simon/puzzles.git;a=commitdiff;h=875f0af21fbced5cbf6cf63b86fe3dc51682c863;hp=2a9be2b89df3e6a07a1d90a06f8ac00a92d789e5
Author: Ben Harris <bjh21 at bjh21.me.uk>
Date:   Wed Feb 1 21:28:35 2023 +0000

    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

 tracks.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)



More information about the tartarus-commits mailing list