shithub: puzzles

Download patch

ref: 27c97c0ffdda0b91fecf155f3bc29b32ed806bb2
parent: b4aaa11943fb72b09fe173bc97bd9313ff94738c
author: Ben Harris <bjh21@bjh21.me.uk>
date: Thu Jan 19 15:26:23 EST 2023

Allow repeated "solve" operations in Guess

Since using the "solve" option doesn't consume a guess, it's safe to
allow it to occur multiple times.  Without this, selecting "solve" a
second time causes an assertion failure because solve() returns a move
string that's rejected by execute_move().

Possible solve() could instead refuse to solve an already-solved
puzzle, but that seems needlessly pedantic.

[fixes c84af670b52f09e9e47587584c0559c508d4a37d]

--- a/guess.c
+++ b/guess.c
@@ -946,13 +946,13 @@
     game_state *ret;
     const char *p;
 
-    /* No moves are allowed once the game is solved. */
-    if (from->solved) return NULL;
     if (!strcmp(move, "S")) {
 	ret = dup_game(from);
 	ret->solved = -1;
 	return ret;
     } else if (move[0] == 'G') {
+        /* No guesses are allowed once the game is solved. */
+        if (from->solved) return NULL;
 	p = move+1;
 
 	ret = dup_game(from);