Spaces:
Running
Running
import json | |
import logging | |
from collections import defaultdict | |
from flask import Flask, request, jsonify | |
import nltk | |
from nltk.corpus import words | |
import random | |
from routes import app | |
# Initialize NLTK word list | |
try: | |
nltk.data.find('corpora/words') | |
except LookupError: | |
nltk.download('words') | |
# Configure logging | |
logging.basicConfig(level=logging.INFO) | |
logger = logging.getLogger(__name__) | |
def load_word_list(): | |
word_list = [word.lower() for word in words.words() if len(word) == 5 and word.isalpha()] | |
return word_list | |
WORD_LIST = load_word_list() | |
def filter_words(guess, feedback, guess_list): | |
for word in guess_list[:]: # Create a copy of the list to avoid modifying it during iteration | |
for i in range(5): | |
if feedback[i] == "w" and guess[i] in word and guess.count(guess[i]) == 1: | |
guess_list.remove(word) | |
break | |
elif feedback[i] == "g" and guess[i] != word[i]: | |
guess_list.remove(word) | |
break | |
elif feedback[i] == "y" and guess[i] not in word: | |
guess_list.remove(word) | |
break | |
elif feedback[i] == "y" and guess[i] == word[i]: | |
guess_list.remove(word) | |
break | |
return guess_list | |
def suggest_best_guess(guess_history, evaluation_history, word_list): | |
# Start with the full word list | |
guess_list = word_list.copy() | |
for guess, feedback in zip(guess_history, evaluation_history): | |
guess_list = filter_words(guess, feedback, guess_list) | |
# Return the best guess (first valid word in the filtered list) | |
return guess_list[0] if guess_list else None # Return None if no valid words are left | |
def wordle_game(): | |
# Parse JSON input | |
data = request.get_json() | |
logger.info("Data received for evaluation: %s", data) | |
guess_history = data.get("guessHistory", []) | |
evaluation_history = data.get("evaluationHistory", []) | |
start_word = ["crate", "raise", "least", "salet"] | |
n = random.randint(-1,2) | |
# If first word, use "CRATE" as the first guess | |
if not guess_history: | |
next_guess = start_word[n] | |
logger.info("First guess: %s", next_guess) | |
return jsonify({"guess": next_guess}) | |
# Suggest the next guess | |
next_guess = suggest_best_guess(guess_history, evaluation_history, WORD_LIST) | |
logger.info("Suggested next guess: %s", next_guess) | |
# If evaluation history is 6 or more, the game is over | |
if len(evaluation_history) >= 6: | |
return jsonify({}) | |
# Return the response | |
return jsonify({"guess": next_guess}) |