Clever_Sparkle

Wordle_solver_v4

Feb 11th, 2022
1,328
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.55 KB | None | 0 0
  1. from datetime import datetime
  2. # I want to know time when the results was be created
  3. now = datetime.now()
  4. current_time = now.strftime("%H-%M-%S")
  5.  
  6. # Dict is mapping A:0 - Z:25 to create index form letter. Prepared to extend beyond ASCI characters
  7. LtN_dict = {'a': 0, 'b': 1, 'c': 2, 'd': 3, 'e': 4, 'f': 5, 'g': 6, 'h': 7, 'i': 8, 'j': 9, 'k': 10, 'l': 11, 'm': 12,
  8.             'n': 13, 'o': 14, 'p': 15, 'q': 16, 'r': 17, 's': 18, 't': 19, 'u': 20, 'v': 21, 'w': 22, 'x': 23, 'y': 24,
  9.             'z': 25}
  10.  
  11. # wordle_corpus is base of all 5-letter words in Wordle game
  12. def CreateWordleCorpus():
  13.     global wordle_corpus
  14.     with open(input_file_name, "r") as input_file:
  15.         wordle_corpus = []
  16.         for word in input_file:
  17.             wordle_corpus.append(word)
  18.  
  19.  
  20. def CreateLetterCounterList():
  21.     global letter_counter_list
  22.     letter_counter_list = []
  23.     for x in range(26):
  24.         letter_counter_list.append(0.)
  25.  
  26.  
  27. def CountLetters():
  28.     for word in wordle_corpus:
  29.         word = word.strip()
  30.         for letter in word:
  31.             letter_counter_list[LtN_dict.get(letter, 0)] += 1
  32.  
  33.  
  34. def CalculateLetterFreq():
  35.     global letter_freq_list
  36.     letter_freq_list = letter_counter_list
  37.     for x in range(len(letter_counter_list)):
  38.         letter_freq_list[x] = letter_freq_list[x] / len(wordle_corpus)
  39.  
  40.  
  41. def CreateWordFreqTuple():
  42.     global word_freq_tuple
  43.     word_freq_tuple = []
  44.     for word in wordle_corpus:
  45.         word = word.strip()
  46.         word_val = 0
  47.         uniq_letters = ''
  48.         for letter in word:
  49.             if letter not in str((''.join(set(uniq_letters)))):
  50.                 word_val += letter_freq_list[LtN_dict.get(letter, 0)]
  51.                 uniq_letters += letter
  52.         word_freq_tuple.append((word, word_val))
  53.  
  54.  
  55. # tuple has structure ('word','word_value'); val_key[1] is sorting for word_value
  56. def SortWordFreqTuple():
  57.     word_freq_tuple.sort(key=lambda val_key: val_key[1], reverse=True)
  58.  
  59.  
  60. def SaveResultsToFile():
  61.     output_file.write("Current Time: " + str(current_time) + '\n')
  62.     output_file.write('Words count: : ' + str(len(wordle_corpus)) + '\n')
  63.     for x in range(len(word_freq_tuple)):
  64.         output_file.write(str(word_freq_tuple[x]) + '\n')
  65.     print('DONE! Results is saved successfully to: ' + output_file_name)
  66.  
  67.  
  68. # ---------------------------------------------------------
  69.  
  70. def GreenLetter(tested_letter, wordle_input, letter_index):
  71.     if (wordle_input[letter_index] == tested_letter):
  72.         return True
  73.     else:
  74.         return False
  75.  
  76.  
  77. def YellowLetter(tested_letter, wordle_input):
  78.     if (tested_letter in wordle_input):
  79.         return True
  80.     else:
  81.         return False
  82.  
  83.  
  84. def BlackLetter(tested_letter, wordle_input):
  85.     if (tested_letter not in wordle_input):
  86.         return True
  87.     else:
  88.         return False
  89.  
  90. # call function based od letter in wordle feedback
  91. def TestLetter(wordle_feedback_key, tested_letter, letter_index, wordle_input):
  92.     match wordle_feedback_key[letter_index]:
  93.         case 'G':
  94.             return GreenLetter(tested_letter, wordle_input, letter_index)
  95.         case 'Y':
  96.             return YellowLetter(tested_letter, wordle_input)
  97.         case 'B':
  98.             return BlackLetter(tested_letter, wordle_input)
  99.         case _:
  100.             print('input error!')
  101.             return 'input error!'
  102.  
  103. # checking if all letters is matching to Wordle feedback
  104. def MatchWords(wordle_input, wordle_feedback_key, tested_word):
  105.     letter_indexMW = 0
  106.     good_word = True
  107.     for tested_letter in tested_word:
  108.         if good_word == False:
  109.             return False
  110.         good_word = TestLetter(wordle_feedback_key, tested_letter, letter_indexMW, wordle_input)
  111.         letter_indexMW += 1
  112.     return True
  113.  
  114.  
  115. def CreateMatchingWordList():
  116.     global MatchingWordList
  117.     MatchingWordList = []
  118.     for tested_word in avaliable_words_list:
  119.         tested_word = tested_word.strip()
  120.         if MatchWords(wordle_input, wordle_feedback_key, tested_word) == True:
  121.             MatchingWordList.append(tested_word)
  122.  
  123.  
  124. # ------------------------------------------------------
  125.  
  126. # input_file_name = "input1.txt"
  127. input_file_name = "wordle_12972.txt"
  128. output_file_name = "results.txt"
  129. output_file = open(output_file_name, "w")
  130.  
  131.  
  132. CreateWordleCorpus()
  133. CreateLetterCounterList()
  134. CountLetters()
  135. CalculateLetterFreq()
  136. CreateWordFreqTuple()
  137. SortWordFreqTuple()
  138. SaveResultsToFile()
  139.  
  140. wordle_input = 'aloes'
  141. wordle_feedback_key = 'YBBYY'
  142. avaliable_words_list = wordle_corpus
  143. CreateMatchingWordList()
  144. wordle_corpus = MatchingWordList
  145. print(wordle_corpus)
  146.  
Advertisement
Add Comment
Please, Sign In to add comment