explain hard mode errors in guess prompt

Replace "GREEN Issue", "YELLOW Issue" and "POOL Issue" with messages
that say which letter broke which rule:

  3rd letter must be A
  Must contain R
  1st letter can't be R   (was yellow there before)
  S is not in the word    (strict mode, grey letter reused)

hard_mode_check now records the failing position, and a yellow letter
reused in the same spot gets its own code (6, previously the unused
"NEW Issue"). Drop the unused "Not A Valid Guess" code.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
adamandClaude Opus 5.5 committed 2026-09-29 17:35:38 +00:00
1 parent 6b07093d68
commit 0f8640e9e8
1 file changed
+10 -6
+10 -6
View File
@@ -262,12 +262,14 @@ function retrieve_guess() {
validate_guess "${GUESS}" ; valid_guess=$? validate_guess "${GUESS}" ; valid_guess=$?
declare message declare message
declare -r pos="${HARD_MODE_POS}"
declare -r letter="${GUESS:pos:1}"
declare -ra ordinals=(1st 2nd 3rd 4th 5th)
[[ ${valid_guess} == 1 ]] && message="Not A Valid Word" [[ ${valid_guess} == 1 ]] && message="Not A Valid Word"
[[ ${valid_guess} == 2 ]] && message="Not A Valid Guess" [[ ${valid_guess} == 3 ]] && message="${ordinals[pos]} letter must be ${greens[pos]}"
[[ ${valid_guess} == 3 ]] && message="GREEN Issue" [[ ${valid_guess} == 4 ]] && message="Must contain ${yellows[pos]}"
[[ ${valid_guess} == 4 ]] && message="YELLOW Issue" [[ ${valid_guess} == 5 ]] && message="${letter^^} is not in the word"
[[ ${valid_guess} == 5 ]] && message="POOL Issue" [[ ${valid_guess} == 6 ]] && message="${ordinals[pos]} letter can't be ${letter^^}"
[[ ${valid_guess} == 6 ]] && message="NEW Issue"
if [[ -n "${message}" ]]; then if [[ -n "${message}" ]]; then
GUESS=$(retrieve_guess "${message}") || exit 1 GUESS=$(retrieve_guess "${message}") || exit 1
@@ -316,6 +318,8 @@ function hard_mode_check() {
declare GUESS=$1 declare GUESS=$1
for (( i=0; i<WIDTH; i++ )); do for (( i=0; i<WIDTH; i++ )); do
HARD_MODE_POS=$i # letter position that failed, for the error message
if [[ "${STRICT_HARD_MODE}" == 1 ]]; then if [[ "${STRICT_HARD_MODE}" == 1 ]]; then
[[ "${POOL}" == *${GUESS:i:1}* ]] || return 5 [[ "${POOL}" == *${GUESS:i:1}* ]] || return 5
fi fi
@@ -331,7 +335,7 @@ function hard_mode_check() {
for (( r=ROW-1; r>=0; r-- )); do for (( r=ROW-1; r>=0; r-- )); do
CHAR="${GUESS:i:1}" CHAR="${GUESS:i:1}"
PREV_CHAR="${YELLOWS[$r,$i]}" PREV_CHAR="${YELLOWS[$r,$i]}"
[[ "${CHAR}" == "${PREV_CHAR}" ]] && return 4 [[ "${CHAR}" == "${PREV_CHAR}" ]] && return 6
done done
done done