Псевдокод для этого выглядит примерно так:
Load the word list (dictionary)
Input the words to unscramble
For each word:
Find every permutation of letters in that word (permutation)
For each permutation:
Add this permutation to the solution list if it exists in the dictionary
Print the solutions that were found.
Функция dictionary () заполняет ваш список слов из файла.
Функция permutation () возвращает каждую перестановку букв в данном слове.
Функция permutation () выполняет следующие действия:
for an in permutation(s[1:]):
s [1:] возвращает строку с усеченным первым символом. Вы увидите, что он использует рекурсию для повторного вызова permutation () до тех пор, пока не останется символов для усечения спереди. Вы должны знать рекурсию, чтобы понять эту строку. Использование рекурсии позволяет этому алгоритму охватывать любое количество букв и при этом быть элегантным.
for pos in range(len(an)+1):
Для каждой оставшейся буквенной позиции.
ans.append(an[:pos]+s[0]+an[pos:])
Создайте перестановку, переместив первую букву (которую мы урезали ранее) в каждую позицию между каждой другой буквой.
Итак, возьмем, к примеру, слово «часы». После рекурсии будет цикл, который генерирует следующие слова:
awtch
atwch
atcwh
atchw
Все, что я сделал, чтобы сгенерировать эти слова, это взять первую букву и изменить ее положение. Продолжайте это в сочетании с усечением букв, и вы будете создавать каждую перестановку.
(вау, это, наверное, мой самый длинный ответ)