-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathsimulate.py
83 lines (67 loc) · 2.29 KB
/
simulate.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
import statistics
from wordless import (
generate_index,
select_guesses,
process_response,
filter_candidates,
get_yellow_letters,
)
from word_list import all_words
def generate_response(guess, word):
# Generate the response
response = ""
for i in range(len(guess)):
if guess[i] == word[i]:
response += "g"
continue
elif guess[i] in word:
response += "y"
continue
else:
response += "b"
continue
return response
if __name__ == "__main__":
index = generate_index()
guess_counts = {}
n_words = len(index["five_letter_words"])
for k, word in enumerate(index["five_letter_words"]):
game_state = {
"all_missing_letters": [],
"all_wrong_pos_letters": [],
"all_correct_pos_letters": [],
"unknown_letters": [letter for letter in "abcdefghijklmnopqrstuvwxyz"],
"guessed_words": [],
}
guessing = True
guess_sequence = []
while guessing:
# Simulate guessing at this word
candidates = filter_candidates(
game_state=game_state,
index=index,
)
guess = select_guesses(
candidates=candidates,
game_state=game_state,
index=index,
)[0]
response = generate_response(guess=guess, word=word)
game_state = process_response(guess, response, game_state)
# print("Guessed {} got response {}".format(guess, response))
# print(game_state)
guess_sequence.append(
f"{guess}, {len(get_yellow_letters(game_state))}, {len(candidates)}"
)
if guess == word:
guessing = False
print(
f"{k}/{n_words} Guessed {word} with {len(game_state['guessed_words'])} guesses: {guess_sequence}"
)
guess_counts[word] = len(game_state["guessed_words"])
if k >= 1000:
break
print(f"Mean: {statistics.mean(guess_counts.values())}")
print(f"Stdev: {statistics.stdev(guess_counts.values())}")
print(f"Max: {max(guess_counts.values())}")
print(f"Failures: {sum([val > 6 for val in guess_counts.values()])}")