def buildRegex(secret, knownLetters): | |
regex = '' | |
for letter in secret: | |
if letter in knownLetters: | |
regex += letter | |
else: | |
regex += '.' | |
return regex | |
# "secret" is the secret word | |
# "dictionary" is the list of available words | |
def playGame(secret, dictionary): | |
if secret not in dictionary: | |
print('secret not in dictionary') | |
return 0 | |
dictionary = list(filter(lambda x: len(x) == len(secret), dictionary)) | |
mistakes = 0 | |
alphabet = list('abcdefghijklmnopqrstuvwxyz') | |
knownLetters = set() | |
regex = buildRegex(secret, knownLetters) | |
while True: | |
# build probabilities | |
probabilities = dict.fromkeys(alphabet, 0) | |
for word in dictionary: | |
# iterate over letters left in alphabet which are in word | |
for letter in alphabet: | |
if letter in word: | |
probabilities[letter] += 1 | |
# find letter with highest probability | |
maxProb = 0 | |
guess = 'z' | |
for letter in probabilities: | |
if probabilities[letter] > maxProb: | |
maxProb = probabilities[letter] | |
guess = letter | |
alphabet = list(filter(lambda x: x != guess)) | |
# guess the letter | |
if guess in secret: | |
knownLetters.add(guess) | |
regex = buildRegex(secret, knownLetters) | |
if not '.' in regex: | |
return mistakes | |
dictionary = list(filter(lambda x: re.match(regex, x), dictionary)) | |
if len(dictionary) == 1: | |
return mistakes | |
else: | |
mistakes += 1 | |
dictionary = list(filter(lambda x: guess not in word, dictionary)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment