wordle-solver / wordle_game.py
santit96's picture
Fix bug in state update with mask
aec341d
raw
history blame
3.01 kB
from rich.prompt import Prompt
from rich.console import Console
from random import choice
from wordle_env.words import target_vocabulary, complete_vocabulary
SQUARES = {
'correct_place': '🟩',
'correct_letter': '🟨',
'incorrect_letter': '⬛'
}
WELCOME_MESSAGE = f'\n[white on blue] WELCOME TO WORDLE [/]\n'
PLAYER_INSTRUCTIONS = "You may start guessing\n"
GUESS_STATEMENT = "\nEnter your guess"
ALLOWED_GUESSES = 6
def correct_place(letter):
return f'[black on green]{letter}[/]'
def correct_letter(letter):
return f'[black on yellow]{letter}[/]'
def incorrect_letter(letter):
return f'[black on white]{letter}[/]'
def check_guess(guess, answer):
guessed = [None, None, None, None, None]
wordle_pattern = []
processed_letters = []
for i, letter in enumerate(guess):
if answer[i] == guess[i]:
guessed[i] = correct_place(letter)
wordle_pattern.append(SQUARES['correct_place'])
processed_letters.append(letter)
for i, letter in enumerate(guess):
if answer[i] != guess[i]:
if letter in answer and answer.count(letter) > processed_letters.count(letter):
guessed[i] = correct_letter(letter)
wordle_pattern.append(SQUARES['correct_letter'])
else:
guessed[i] = incorrect_letter(letter)
wordle_pattern.append(SQUARES['incorrect_letter'])
processed_letters.append(letter)
return ''.join(guessed), ''.join(wordle_pattern)
def game(console, chosen_word):
end_of_game = False
already_guessed = []
full_wordle_pattern = []
all_words_guessed = []
while not end_of_game:
guess = Prompt.ask(GUESS_STATEMENT).upper()
while len(guess) != 5 or guess in already_guessed or guess not in complete_vocabulary:
if guess in already_guessed:
console.print("[red]You've already guessed this word!!\n[/]")
else:
console.print('[red]Please enter a valid 5-letter word!!\n[/]')
guess = Prompt.ask(GUESS_STATEMENT).upper()
already_guessed.append(guess)
guessed, pattern = check_guess(guess, chosen_word)
all_words_guessed.append(guessed)
full_wordle_pattern.append(pattern)
console.print(*all_words_guessed, sep="\n")
if guess == chosen_word or len(already_guessed) == ALLOWED_GUESSES:
end_of_game = True
if len(already_guessed) == ALLOWED_GUESSES and guess != chosen_word:
console.print(f"\n[red]WORDLE X/{ALLOWED_GUESSES}[/]")
console.print(f'\n[green]Correct Word: {chosen_word}[/]')
else:
console.print(f"\n[green]WORDLE {len(already_guessed)}/{ALLOWED_GUESSES}[/]\n")
console.print(*full_wordle_pattern, sep="\n")
if __name__ == '__main__':
console = Console()
chosen_word = choice(target_vocabulary)
console.print(WELCOME_MESSAGE)
console.print(PLAYER_INSTRUCTIONS)
game(console, chosen_word)