import math
def guess(attempt, secret):
n = len(secret)
assert n == len(attempt), (attempt, secret, n)
result = ['-'] * n
unused = list(secret)
for i in range(n):
if attempt[i] == secret[i]:
result[i] = '+'
unused[i] = None
for i in range(n):
if result[i] == '-' and attempt[i] in unused:
result[i] = '?'
unused[unused.index(attempt[i])] = None
return ''.join(result)
def best_move(possible_words):
if len(possible_words) == 2315:
return "raise"
if len(possible_words) == 3483:
return "норка"
if len(possible_words) == 8363:
return "12953"
best_score = 1e100
best_move = None
for move in words:
score = 0.0 # чем меньше, тем лучше
if move in possible_words:
score -= 1.0
groups = {}
for secret in possible_words:
result = guess(move, secret)
groups[result] = groups.get(result, 0) + 1
for group_size in groups.values():
score += group_size * math.log2(group_size)
if score < best_score:
best_score = score
best_move = move
return best_move
def is_prime(p):
for x in range(2, round(p ** 0.5) + 1):
if p % x == 0:
return False
return p > 1
def primes(n=5):
return [str(p) for p in range(10**(n - 1), 10**n) if is_prime(p)]
# https://www.nytimes.com/games/wordle/
# https://wordle-igra.ru/
# https://wordle.belousov.one/
# https://converged.yt/primel/
words = open("ru_nounlist.txt", encoding="utf-8").read().split()
words = [word for word in words if len(word) == 5]
# words = primes()
possible_words = words
while len(possible_words) > 1:
move = best_move(possible_words)
print(move)
result = input()
possible_words = [word for word in possible_words if result == guess(move, word)]
print("Info:", len(possible_words), possible_words)
Comments
0 B
|👍
/👎
0 B
|👍
/👎
0 B
|👍
/👎
0 B
|👍
/👎