Я написал короткий скрипт Anagram Solver на Python 2.7.
#Import Permutations Module
from itertools import permutations as perm
#Defined Functions
def check(x,y):
#Opens Dictionary File
with open('wordsEn.txt') as dictionary:
'''Checks the permutations against all of the dictionary words and appends
any matching ones to on of the empty lists'''
for line in dictionary:
for i in x:
if i + '\n' == line:
y.append(i)
#Empty Lists that will be appended to later
anagram_perms = []
possible_words = []
#Anagram User Input
anagram = list(raw_input("Input scrambled word: ").lower())
#Creates single list items from the permutations, deletes duplicates
for char in perm(anagram):
anagram_perms.append("".join(char))
anagram_perms = list(set(anagram_perms))
#Uses the defined function
check(anagram_perms, possible_words)
#Prints the number of perms created, then prints the possible words beneath it
print len(anagram_perms)
print '\n'.join(possible_words)
По сути, он берет введенную пользователем анаграмму, генерирует и помещает в список все возможные комбинации букв (используя itertools.permutations
), удаляя любые дубликаты. Затем он сравнивает каждую из этих комбинаций с текстовым файлом словаря из 100 000 слов, помещая любые совпадающие слова в список для печати.
Я столкнулся с проблемой, что если пользователь вводит слово, длина которого превышает 6 уникальных букв, количество сгенерированных перестановок вызывает зависание и сбой. Типичным вводом будут 9-буквенные анаграммы, однако очевидно, что они будут выводить перестановки 362880 ('9!'), если все буквы разные, что невозможно.
У меня есть несколько потенциальных решений:
- Создание ряда пустых списков, которые могут содержать только определенное количество добавленных перестановок. Как только эти списки заполнены, перестановки добавляются к следующему. Затем каждый из этих списков сверяется с текстовым файлом.
- Создание одного пустого списка, содержащегося в цикле. Перестановки генерируются и добавляются к списку до определенного рабочего числа, затем список используется для проверки текстового файла перед его очисткой и добавлением следующего количества перестановок.
- Какой-то другой метод, при котором создается определенное количество перестановок, затем процесс приостанавливается, пока текущие сгенерированные перестановки проверяются на соответствие текстовому файлу, а затем возобновляются и повторяются.
Однако я новичок в разработке Python и действительно не знаю, возможно ли это или как я буду внедрять их в свой код; и другие вопросы по подобным темам толком не смогли помочь.
Если кто-то хочет увидеть мой код до сих пор, я был бы рад сжать его и опубликовать, но ради того, чтобы больше не задавать этот вопрос, я оставлю его, если он не будет запрошен. (обновлено выше)
Спасибо!