@fesano

Как составить из букв слово?

Допустим, есть строка "енап", нужно составить из данных слов существующие слово, в данном случае это "пена". Python
  • Вопрос задан
  • 341 просмотр
Решения вопроса 1
fox_12
@fox_12 Куратор тега Python
Расставляю биты, управляю заряженными частицами
from itertools import permutations

# словарь существующих слов
dictionary = [
    'пена',
]

for im in permutations('енап', 4):
    word = ''.join(im)
    print(word, word in dictionary)


енап False
енпа False
еанп False
еапн False
епна False
епан False
неап False
непа False
наеп False
напе False
нпеа False
нпае False
аенп False
аепн False
анеп False
анпе False
апен False
апне False
пена True
пеан False
пнеа False
пнае False
паен False
пане False


Если у вас слова с существенно большим количеством букв - выполните обратное действие - напишите простую функцию проверки двух слов - что все буквы из одного слова содержатся в другом. Например такую:

def check_it(word1:str, word2:str) -> bool:
    if len(word1) != len(word2):
        return False
    
    return sorted(word1) == sorted(word2)

for word in dictionary:
    if check_it(word, 'енап'):
        print(word)


Прочитайте ваш файл russians.txt отсюда https://github.com/danakt/russian-words, и прогоните все слова через проверку утилитой.
На моем слабом ноуте эта проверка занимает 416 мс и выдает перечень слов из этого словаря:
епан
напе
пане
пеан
пена

Устраивает вам этот словарь или нет - решайте сами...
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
0. Скачай откуда-нибудь подходящий список существующих слов.
1. Отсей слова, которые начинаются не на одну из заданных букв.
2. Если кажду букву надо использовать ровно один раз, отсей слова, у которых длина не подходит.
3. В оставшихся словах отсортируй буквы и сравнивай результат с отсортированным списком данных букв. Это если каждая буква используется один раз. Если буквы могут повторяться, то сделай множество букв слова и множество данных букв, и сравнивай их.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы