Added multithreading to solve every wordle faster
This commit is contained in:
@@ -1,4 +1,5 @@
|
|||||||
import wordle_solver
|
import wordle_solver
|
||||||
|
import multiprocessing as mul
|
||||||
|
|
||||||
def wordle_guess(not_letters, has_letters, position_letters):
|
def wordle_guess(not_letters, has_letters, position_letters):
|
||||||
input_file_path = 'cleaned_words.txt'
|
input_file_path = 'cleaned_words.txt'
|
||||||
@@ -17,22 +18,65 @@ def wordle_guess(not_letters, has_letters, position_letters):
|
|||||||
def check_guess(guess, word, not_letters, has_letters, position_letters):
|
def check_guess(guess, word, not_letters, has_letters, position_letters):
|
||||||
|
|
||||||
for i, letter in enumerate(guess):
|
for i, letter in enumerate(guess):
|
||||||
if letter in word:
|
if letter in word and letter not in has_letters:
|
||||||
if letter not in has_letters:
|
has_letters += letter
|
||||||
|
elif letter not in not_letters and letter not in has_letters:
|
||||||
|
not_letters += letter
|
||||||
|
|
||||||
if letter == word[i]:
|
if letter == word[i]:
|
||||||
position_letters = position_letters[:i] + letter + position_letters[i+1:]
|
position_letters = position_letters[:i] + letter + position_letters[i+1:]
|
||||||
has_letters += letter
|
|
||||||
else:
|
|
||||||
not_letters += letter
|
|
||||||
|
|
||||||
return not_letters, has_letters, position_letters
|
return not_letters, has_letters, position_letters
|
||||||
|
|
||||||
word = "irate"
|
def get_word_stats(words):
|
||||||
not_letters = ""
|
not_letters = ""
|
||||||
has_letters = ""
|
has_letters = ""
|
||||||
position_letters = "_____"
|
position_letters = "_____"
|
||||||
|
guesses = []
|
||||||
|
total_num_guesses = 0
|
||||||
|
total_words = 0
|
||||||
|
percentage = 0
|
||||||
|
last_percentage = 0
|
||||||
|
|
||||||
for i in range(10):
|
for total_words, word in enumerate(words):
|
||||||
|
for x in range(20):
|
||||||
|
total_num_guesses += 1
|
||||||
guess = wordle_guess(not_letters, has_letters, position_letters)
|
guess = wordle_guess(not_letters, has_letters, position_letters)
|
||||||
not_letters, has_letters, position_letters = check_guess(guess[0], word, not_letters, has_letters, position_letters)
|
new_guess = guess[0]
|
||||||
print(guess[0], not_letters, has_letters, position_letters)
|
i = 0
|
||||||
|
while new_guess in guesses:
|
||||||
|
new_guess = guess[i]
|
||||||
|
i += 1
|
||||||
|
|
||||||
|
not_letters, has_letters, position_letters = check_guess(new_guess, word, not_letters, has_letters, position_letters)
|
||||||
|
guesses.append(new_guess)
|
||||||
|
#print(new_guess, not_letters, has_letters, position_letters)
|
||||||
|
if position_letters == word:
|
||||||
|
percentage = round(total_words*100/len(words), 0)
|
||||||
|
if percentage - last_percentage >= 5:
|
||||||
|
print(str(percentage) + r"% finished with", word[0])
|
||||||
|
last_percentage = percentage
|
||||||
|
not_letters = ""
|
||||||
|
has_letters = ""
|
||||||
|
position_letters = "_____"
|
||||||
|
guesses = []
|
||||||
|
break
|
||||||
|
|
||||||
|
print("The average number of guesses per {} word is ".format(word[0]) + str(total_num_guesses/total_words))
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
alphabet = list("abcdefghijklmnopqrstuvwxyz")
|
||||||
|
|
||||||
|
input_file_path = 'cleaned_words.txt'
|
||||||
|
dictionary = open(input_file_path, 'r')
|
||||||
|
words = wordle_solver.read_in_dict(dictionary)
|
||||||
|
dictionary.close()
|
||||||
|
process_list = []
|
||||||
|
for letter in alphabet:
|
||||||
|
test_words = wordle_solver.words_with_letter_positions("{}____".format(letter), words)
|
||||||
|
tester = mul.Process(target=get_word_stats, args=([test_words]))
|
||||||
|
process_list.append(tester)
|
||||||
|
|
||||||
|
for process in process_list:
|
||||||
|
process.start()
|
||||||
|
|||||||
Reference in New Issue
Block a user