-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathwordleSolver.py
76 lines (64 loc) · 2.24 KB
/
wordleSolver.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
import wordle
import pandas as pd
import random
def main():
bank = pd.read_table('D:\PyCharm\catHacks\words.csv',header=None,names=['words'])
bank = bank[bank['words'].str.len() == 5]
final = bank.sample().iloc[0][0]
# print(final)
game = wordle.Wordle(word=final, real_words=True)
print('adieu')
response = game.send_guess('adieu')
check = response[1]
response = response[0].replace(" ", "")
for i in range(5):
if check:
print("Algorithm was correct, answer was ", final)
return True
notin, used, corr = set(), {}, {}
i = 0
j = 0
lc = 0
while i < len(response):
if response[i] == '*':
corr[response[i + 1].lower()] = lc
i += 2
elif response[i].islower():
notin.add(response[i].lower())
else:
used[response[i].lower()] = lc
i += 1
lc += 1
for c in used:
if c in notin :
notin.remove(c)
for c in corr:
if c in notin :
notin.remove(c)
# print(notin, used, corr)
for c in used:
bank = bank[bank['words'].str.contains(c, na=False)].dropna()
for c in used:
bank = bank[bank['words'].str[used[c]] != c].dropna()
for c in notin:
bank = bank[bank['words'].str.contains(c, na=False) == False].dropna()
for c in corr:
bank = bank[bank['words'].str[corr[c]] == c].dropna()
# print(bank['words'])
response = '0'
while len(response) < 5 and j < len(bank):
response = game.send_guess(bank.iloc[j][0])
if(isinstance(response,tuple)):
check = response[1]
response = response[0].replace(" ", "")
bank = bank[bank['words'] != bank.iloc[j][0]]
j += 1
print(response.replace("*", "").lower())
if check:
print("Algorithm was correct, answer was ", final)
return True
else:
print("Algorithm was not correct, correct answer was ", final)
return False
if __name__ == '__main__':
main()