Я пытаюсь написать алгоритм палача. Моя идея такова:
- Предварительная обработка словаря, который содержит относительные буквенные частоты слов в зависимости от их длины. Шаг завершен.
Пример:
#Each key corresponds to length of the word.
frequencyDict = {2: ['a', 'o', 'e', 'i', 'm', 'h', 'n', 'u', 's', 't', 'y', 'b', 'd', 'l', 'p', 'x', 'f', 'r', 'w', 'g', 'k', 'j'],
3: ['a', 'e', 'o', 'i', 't', 's', 'u', 'p', 'r', 'n', 'd', 'b', 'm', 'g', 'y', 'l', 'h', 'w', 'f', 'c', 'k', 'x', 'v', 'j', 'z', 'q'],
4: ['e', 'a', 's', 'o', 'i', 'l', 'r', 't', 'n', 'u', 'd', 'p', 'm', 'h', 'b', 'c', 'g', 'k', 'y', 'f', 'w', 'v', 'j', 'z', 'x', 'q'],
5: ['s', 'e', 'a', 'o', 'r', 'i', 'l', 't', 'n', 'd', 'u', 'c', 'p', 'y', 'm', 'h', 'g', 'b', 'k', 'f', 'w', 'v', 'z', 'x', 'j', 'q'],
6: ['e', 's', 'a', 'r', 'i', 'o', 'l', 'n', 't', 'd', 'u', 'c', 'p', 'm', 'g', 'h', 'b', 'y', 'f', 'k', 'w', 'v', 'z', 'x', 'j', 'q'],
7: ['e', 's', 'a', 'i', 'r', 'n', 'o', 't', 'l', 'd', 'u', 'c', 'g', 'p', 'm', 'h', 'b', 'y', 'f', 'k', 'w', 'v', 'z', 'x', 'j', 'q'],
8: ['e', 's', 'i', 'a', 'r', 'n', 'o', 't', 'l', 'd', 'c', 'u', 'g', 'p', 'm', 'h', 'b', 'y', 'f', 'k', 'w', 'v', 'z', 'x', 'q', 'j']}
У меня также есть генератор слов в словаре:
dictionary = word_reader('C:\\Python27\\dictionary.txt', len(letters))
Который основан на этой функции
#Strips dictionary of words that are too big or too small from the list
def word_reader(filename, L):
L2 = L+2
return (word.strip() for word in open(filename) \
if len(word) < L2 and len(word) > 2)
- Эта конкретная игра даст вам последний гласный бесплатно. Если слово было земляным, например,
пользователь получит следующую доску: e ---- e- догадаться. Итак, я хочу найти способ создать новый генератор или список
со всеми вычеркнутыми словами, которые не соответствуют шаблону e ---- e.
p = re.compile('^e\D\D\D\De\D$', re.IGNORECASE)
сделает это, но может найти слова
которые содержат 'e' в других местах, кроме первой и второй до последней буквы.
Итак, мой первый вопрос:
- Как мне убедиться, что «е»
расположен ТОЛЬКО в первом и
от второй до последней позиции
- Как мне создать интеллектуальную функцию, которая будет иметь новое регулярное выражение при обновлении головоломки, и компьютер продолжает делать предположения?
Например, если слово «обезьяна», компьютеру просто дадут ---- e-
Первым шагом будет удаление из словаря всех слов, не являющихся 6-ю буквами, и всех слов, которые не полностью соответствуют шаблону '---- e-', и помещение их в новый список. Как сделать
Я собираюсь сделать это?
Затем он вычисляет НОВЫЙ частотаDict на основе относительной частоты слов, которые находятся в его
NewList.
Мой текущий способ сделать это выглядит так:
cnt = Counter()
for words in dictionary:
for letters in words:
cnt[letters]+=1
Это самый эффективный способ?
Затем он использовал бы newfrequencyDict, чтобы угадать наиболее распространенную букву, предполагая, что она имеет
еще не угадал. Он продолжает делать это, пока (надеюсь) слово не будет угадано.
Это эффективный алгоритм? Есть ли лучшие реализации?