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)) | |