Spaces:
Runtime error
Runtime error
from itertools import count | |
from src.metrics import get_word_list,Metrics | |
import logging | |
import random | |
from src.utils import WordHash | |
from src.agent import Cerebrum | |
logging.basicConfig(level=logging.INFO) | |
logger = logging.getLogger(__name__) | |
class Wordle: | |
def __init__(self,steps_to_be_tried=6) -> None: | |
self.steps = steps_to_be_tried | |
self.word_list = get_word_list() | |
self.letter_list = list("abcdefghijklmnopqrstuvwxyz") | |
self.wordle = random.choice(self.word_list) | |
self.sixth_sense = Cerebrum() | |
self.hash = WordHash() | |
logger.info(f"The Word to be found is {self.wordle}") | |
self.evaluator = Metrics() | |
def deduct_vocab(self,score_dict:dict): | |
""" | |
Returns True if the word is present in the vocab. | |
""" | |
for letter in score_dict: | |
if score_dict[letter] == 0: | |
if letter in self.letter_list: | |
del self.letter_list[self.letter_list.index(letter)] | |
def preprocess_pos_word(self,pos_score_dict:dict): | |
""" | |
Flag : G -> Sure, Y -> Probable | |
""" | |
pos_slice_list_g = [] | |
pos_slice_list_y = [] | |
for ind in range(len(pos_score_dict)): | |
letter = list(pos_score_dict.keys())[ind] | |
score = pos_score_dict[letter] | |
if score == 2: | |
pos_slice_list_g.append([ind,letter,"G"]) | |
if score == 1: | |
for possible_index in range(5): | |
if possible_index != ind: | |
pos_slice_list_y.append([possible_index,letter,"Y"]) | |
return pos_slice_list_g + pos_slice_list_y | |
def single_step(self,pred_word:str): | |
pos_score_dict = self.evaluator(self.wordle,pred_word) | |
self.deduct_vocab(pos_score_dict) | |
return pos_score_dict | |
def play(self)->str: | |
game_diction = {"step_no":[],"chosen_word":[],"status":[]} | |
for step in range(self.steps): | |
logger.info(f"Step {step}") | |
if step == 0: | |
chosen = self.sixth_sense.random_first_choice() | |
logger.info(f"Chosen word is {chosen}") | |
pos_score_dict = self.single_step(chosen) | |
slice_pos_list = self.hash.slice_pos(self.preprocess_pos_word(pos_score_dict)) | |
game_diction["chosen_word"].append(chosen) | |
game_diction["step_no"].append(step) | |
game_diction["status"].append("CONTINUE") | |
else: | |
chosen = self.sixth_sense.random_n_choice(slice_pos_list) | |
logger.info(f"Chosen word is {chosen}") | |
pos_score_dict = self.single_step(chosen) | |
slice_pos_list = self.hash.slice_pos(self.preprocess_pos_word(pos_score_dict)) | |
game_diction["chosen_word"].append(chosen) | |
game_diction["step_no"].append(step) | |
if chosen != self.wordle: | |
game_diction["status"].append("CONTINUE") | |
elif chosen == self.wordle: | |
game_diction["status"].append("IMPRESSIVE") | |
logger.info(f"The word is {chosen}") | |
break | |
return chosen,game_diction | |
if __name__ == "__main__": | |
pass | |
# pos_score_dict = wordle_module.single_step("cants") | |
# print(pos_score_dict) | |
# slice_pos_list = wordle_module.preprocess_pos_word(pos_score_dict) | |
# print(slice_pos_list) | |
# hash = WordHash() | |
# print(hash.slice_pos(slice_pos_list)) | |