wordle-solver / wordle_game_cli.py
santit96's picture
Add streamlit app to play wordle with ai and change play model base dir
38ae408
from random import choice
from rich.console import Console
from rich.prompt import Prompt
from wordle_env.words import complete_vocabulary, target_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)