shithub: puzzles

Download patch

ref: d3329734387dbaf972b651729245d4ffe7efcc4e
parent: 11c1447eac7698f01c2a00764c2b1a900a9d6a90
author: Ben Harris <bjh21@bjh21.me.uk>
date: Fri Dec 23 10:24:09 EST 2022

Guess: Make 'H' key work properly with "Allow duplicates" off

Before it would not only generate an invalid guess, but also override
the usual rules to allow you to submit it.  Now guesses are only
provided if they're valid, and I've adjusted the maximum-colour finder
so that the code can actually find the correct guess.  This should have
no effect on the behaviour with "Allow duplicates" turned on.

--- a/guess.c
+++ b/guess.c
@@ -707,7 +707,11 @@
         for (j = 0; j < state->params.npegs; ++j)
             if (state->guesses[i]->pegs[j] > maxcolour)
                 maxcolour = state->guesses[i]->pegs[j];
-    maxcolour = min(maxcolour + 1, state->params.ncolours);
+    if (state->params.allow_multiple)
+        maxcolour = min(maxcolour + 1, state->params.ncolours);
+    else
+        maxcolour = min(maxcolour + state->params.npegs,
+                        state->params.ncolours);
 
 increase_mincolour:
     for (i = 0; i < state->next_go; ++i) {
@@ -729,6 +733,7 @@
     }
 
     while (ui->hint->pegs[0] <= state->params.ncolours) {
+        if (!is_markable(&state->params, ui->hint)) goto increment_pegrow;
         for (i = 0; i < state->next_go; ++i) {
             mark_pegs(ui->hint, state->guesses[i], maxcolour);
             for (j = 0; j < state->params.npegs; ++j)