13
13
import time
14
14
15
15
16
+ class Finder :
17
+ def __init__ (self ):
18
+ self .possible_words = get_list_of_words ()
19
+ self .absent_letters = set ([])
20
+ self .present_letters = set ([])
21
+ self .word = ['' ] * 5
22
+
23
+
16
24
def on_release (key ):
17
25
# Start button
18
26
if key == keyboard .Key .esc :
@@ -21,19 +29,19 @@ def on_release(key):
21
29
22
30
def get_row_results (game_row ):
23
31
tiles = game_row .find_elements (By .CLASS_NAME , "Tile-module_tile__3ayIZ" )
24
- evaluation = []
25
- eval_to_int = {
32
+ row_results = []
33
+ res_to_int = {
26
34
"correct" : 1 ,
27
35
"present" : 0 ,
28
36
"absent" : - 1 ,
29
37
"empty" : - 2 ,
30
38
"tbd" : - 3
31
39
}
32
40
for tile in tiles :
33
- evaluation .append (eval_to_int [tile .get_attribute ("data-state" )])
34
- print (evaluation )
41
+ row_results .append (res_to_int [tile .get_attribute ("data-state" )])
42
+ print (row_results )
35
43
36
- return tuple (evaluation )
44
+ return tuple (row_results )
37
45
38
46
39
47
def enter_word (word ):
@@ -71,6 +79,13 @@ def check_letter_in_word(letter, word):
71
79
return False
72
80
73
81
82
+ def check_match (finder_word_letter , possible_word_letter ):
83
+ if finder_word_letter == possible_word_letter :
84
+ return True
85
+ else :
86
+ return False
87
+
88
+
74
89
# From the basic list of words, return all the words with 5 characters.
75
90
def get_list_of_words ():
76
91
list_of_words = open ("words_alpha.txt" , "r" ).read ().strip ().splitlines ()
@@ -90,7 +105,7 @@ def get_list_of_words():
90
105
# letters_not_in_response, is a list which keeps track of the allowed letters
91
106
# letter_not_in_position, is a list which keeps track of the letters in bad position
92
107
# For exemple, "A_A_*A", letters_not_in_response = ['B'], letter_not_in_position = ['K'].
93
- def solving_algorithm (word , res , list_of_words , present_letters , absent_letters ):
108
+ def solving_algorithm (word , res , finder ):
94
109
print ("solving_algorithm start" )
95
110
96
111
solving_string = "*****"
@@ -100,48 +115,51 @@ def solving_algorithm(word, res, list_of_words, present_letters, absent_letters)
100
115
if res [letter ] == 1 : # Case when the status of the letter is "correct"
101
116
print ("the letter is correct" )
102
117
solving_string = solving_string [:letter ] + word [letter ] + solving_string [letter + 1 :]
103
- if word [letter ] in present_letters :
104
- present_letters . remove ( word [ letter ] )
118
+ finder . word [letter ] = word [ letter ]
119
+ print ( finder . word )
105
120
elif res [letter ] == 0 : # Case when the status of the letter is "present" (present but at the wrong position)
106
121
print ("the letter is present" )
122
+ finder .present_letters .add (word [letter ])
107
123
solving_string = solving_string [:letter ] + "_" + solving_string [letter + 1 :]
108
- present_letters .add (word [letter ])
109
124
else : # Case when the status of the letter is "absent"
110
125
print ("the letter is absent" )
111
- if word [letter ] not in present_letters :
112
- absent_letters .add (word [letter ])
126
+ if word [letter ] not in finder . present_letters :
127
+ finder . absent_letters .add (word [letter ])
113
128
solving_string = solving_string [:letter ] + "*" + solving_string [letter + 1 :]
114
129
115
130
print ("Update list of words" )
116
- print ("length of list" , len (list_of_words ))
131
+ print ("length of list" , len (finder . possible_words ))
117
132
118
133
# Update list of words
119
- for absent in absent_letters :
120
- print (absent )
121
- list_of_words = list (filter (lambda x_word : not check_letter_in_word (absent , x_word ), list_of_words ))
122
- for present in present_letters :
123
- print (present )
124
- list_of_words = list (filter (lambda x_word : check_letter_in_word (present , x_word ), list_of_words ))
125
-
126
- print ("letter not in the right position : " , present_letters )
127
- print (create_regex (solving_string , present_letters ))
128
- print ("Letters with absent status" , absent_letters )
129
- print ("solving string :" , solving_string )
130
- print ("list of words : " , list_of_words )
131
- print ("length of list" , len (list_of_words ))
134
+ for absent in finder .absent_letters :
135
+ finder .possible_words = list (
136
+ filter (lambda x_word : not check_letter_in_word (absent , x_word ), finder .possible_words ))
137
+ for present in finder .present_letters :
138
+ finder .possible_words = list (
139
+ filter (lambda x_word : check_letter_in_word (present , x_word ), finder .possible_words ))
140
+ for i in range (len (finder .word )):
141
+ if finder .word [i ] != "" :
142
+ finder .possible_words = list (
143
+ filter (lambda x_word : check_match (x_word [i ], finder .word [i ]), finder .possible_words ))
132
144
133
- return list_of_words
145
+ print ("letter not in the right position : " , finder .present_letters )
146
+ print ("Letters with absent status" , finder .absent_letters )
147
+ print ("list of words : " , finder .possible_words )
148
+ print ("length of list" , len (finder .possible_words ))
149
+
150
+ regex = create_regex (solving_string , finder .present_letters ) # Create the regex
151
+ print (create_regex (solving_string , finder .present_letters ))
152
+
153
+ # print("solving string :", solving_string)
134
154
135
155
136
156
def main ():
137
157
# Start the browser
138
158
browser = webdriver .Firefox (service = FirefoxService (GeckoDriverManager ().install ()))
139
159
browser .get ("https://www.nytimes.com/games/wordle/index.html" )
140
160
141
- list_of_words = get_list_of_words ()
142
- absent_letters = set ([])
143
- present_letters = set ([])
144
- guesses_left = 2
161
+ finder = Finder ()
162
+ guesses_left = 6
145
163
146
164
# Wait for start
147
165
with keyboard .Listener (on_release = on_release , suppress = True ) as listener :
@@ -155,18 +173,18 @@ def main():
155
173
# Get the game rows
156
174
game_rows = browser .find_elements (By .CLASS_NAME , 'Row-module_row__dEHfN' )
157
175
158
- first_string = "tests "
176
+ first_string = "slate "
159
177
enter_word (first_string )
160
178
res = get_row_results (game_rows [0 ])
161
- list_of_words = solving_algorithm (first_string , res , list_of_words , present_letters , absent_letters )
179
+ solving_algorithm (first_string , res , finder )
162
180
guesses_left -= 1
163
181
164
182
time .sleep (1 )
165
183
166
184
for i in range (guesses_left , 0 , - 1 ):
167
- enter_word (list_of_words [0 ])
168
- res = get_row_results (game_rows [i ])
169
- solving_algorithm (list_of_words [0 ], res , list_of_words , present_letters , absent_letters )
185
+ enter_word (finder . possible_words [0 ])
186
+ res = get_row_results (game_rows [guesses_left + 1 - i ])
187
+ solving_algorithm (finder . possible_words [0 ], res , finder )
170
188
time .sleep (1 )
171
189
172
190
0 commit comments