php — Как составить предложение из букв, введенных пользователем?
Вопрос задан
Изменён 7 лет 3 месяца назад
Просмотрен 9k раза
На вход программе подаётся набор английских букв. Имеется словарь из слов.
Как сгенерировать такие предложения из слов, чтобы каждое из предложений состояло только из тех букв, что были поданы на вход, учитывая количество повторений.
Пример
Входящий набор символов: hellomyfriend
Вывод программы:
Feed Hilly Morn Feed Hilly Norm Feed Horny Mill Freehold Nil My Refilled Hon My Defiler Hymn Lo и т.д.
Выбрать слова которые удовлетворяют входному набору символов у меня получилось. А вот быстро составлять из них предложения не получается.
Я делал методом перебора всех слов. Для фразы myfavoritegame
скрипт отрабатывал около 5 минут. На сайте предложения отдаются мгновенно.
Можете что-нибудь посоветовать?
- php
- алгоритм
- математика
- поиск
8
Предположим, вам нужно просто найти все возможные комбинации слов из данного словаря, удовлетворяющие условию. Не отвлекаясь на особенности именно языка.
Важно для поиска:
- наличие букв в слове. Исключаем содержащие буквы вне заданных. Исключаем, по мере составления фразы, уже использованные.
- считаем буквы. В любой момент составления фразы известно, слова какой длины подходят, или точно не подходят.
- повторы букв.
Не важно:
- порядок букв в словарном слове.
- смысл слова.
Для скорости нужно сделать поиск по важным признакам максимально быстрым, при необходимости убрав неважные аспекты.
Для быстрого нахождения слов с подходящим набором букв, но без учёта повторов, можно сделать битный индекс, как предложил @Mirdin: 26 букв английского алфавита = 26 бит. Пронумеровать слова в словаре (или просто индексом считать номер строки) и составить отдельный индекс в две колонки: id слова — битовая маска имеющихся букв. Для словаря меньше 65 тыс. слов, такой индекс будет «весить» 6 байт на слово, менее 400k. Можно держать в оперативной памяти для почти-мгновенного поиска. Так можно быстро найти например, первое слово фразы – просто, чтобы точно были выключены биты «лишних» букв.
Стоит сделать копию словаря, где буквы слова отсортированы по алфавиту, и слова отсортированы по алфавиту. Т.е. опять отдельный индекс: сортированные_буквы - id_слова
. Этот индекс будет тяжелее самого словаря на (число слов * 2 или 3 байта). В этом индексе можно быстро находить подходящие слова и отбрасывать точно-неподходящие.
Алгоритм примерно такой. Ищем первое слово. Хочется найти первое же слово наибольшей возможной длины. Перебор по длине, от большего к меньшему. Ест допустимый набор букв и длина. Нашли первое слово, обновили допустимый набор букв и длины слов – ищем следующее слово.
- Делаете структуру (таблицу в БД, хеш-таблица, словарь и тд что там есть в пхп) из двух полей на запись: хэш и собственно говоря слово. Забиваем эту структуру словами.
- Хэш примерно делается так: индекс буквы в алфавите — степень двойки, все буквы слова складываем (32 бит для русского языка должно хватить). Это простейший вариант, возможно будет необходимо придумать более сложную функцию.
- Получив слово которое надо заанаграмить — вычисляем его хэш и ищем по нему в нашей структуре
UPD: Это для одного слова, с фразами будет сложнее, но принцип тот же
2
Зарегистрируйтесь или войдите
Регистрация через Google
Регистрация через Facebook
Регистрация через почту
Отправить без регистрации
Почта
Необходима, но никому не показывается
Отправить без регистрации
Почта
Необходима, но никому не показывается
Приложение Повар слов — Составь слова из набора букв — «Как отвлечься от мира, чуть напрягая мозг? »
Иногда хочется «потупить» в экран телефона, не напрягаясь и не думая о чём-то насущном. Но смотреть мемасики=деградировать. И чтобы не испытывать угрызения совести, я решила скачать данное приложение. Кстати, попалось оно мне в рекомендациях во время просмотров коротких роликов в отдельном приложении.
Повар слов — Составь слова из набора букв
Так вот, вернёмся к игре
Найди все слова! Тренируй свой ум и увеличивай словарный запас!
Игра в слова Пицца слов бесплатная, играть можно без интернета. Новая головоломка из жанра и“словесные игры”, где нужно соединять буквы и найти слова из набора этих букв.
🛫🛫🛫 При этом можно путешествовать по миру, посещая города, собирать сувениры разных стран, а главное, можно готовить вкусную и ароматную пиццу!🍕🍕
Повар слов — Составь слова из набора букв
Сценарий таков: я повар, который путешествует про миру, собирая из определённых букв слова, создаётся пицца. За что я получаю монетки, бонусы в копилку профессионализма, и доступ к новому уровню, а также перелёт в другую страну. Поэтому игра тренирует не только твой словарный запас, но и укрепляет географические познания.
Повар слов — Составь слова из набора букв
Как заходишь в игру, предлагают прокрутить рулетку, чтобы получить бонус дня: монеты, джекпот, подсказки.
после чего открывается миссия, с набором букв, которые нужно сложить в слова
Повар слов — Составь слова из набора букв
Иногда приходится прибегнуть к подсказкам, а они следующие:
— колпак: открывается любая буква в любом из неразгаданных слов;
— молния: открывается несколько букв в разных словах;
Повар слов — Составь слова из набора букв
— вилка и нож: перемена порядка букв на разносе. Иногда полезна.
— указательный палец: выбираешь букву в конкретном слове.
— телевизор: просмотр рекламы за подсказку.
Раз в день возникает отдельная миссия, за которую ты получаешь бонусы: 10/15/20 монет, колпак и другое.
Повар слов — Составь слова из набора букв
Слова несложные, но не всегда схожие с теми, которые возникают у меня в голове. Для этого есть отдельная «книжка-словарь», где эти слова в игре сохраняются. Одно слово=одна монетка. При просмотре рекламы в приложении монетки из словаря удваиваются.
Повар слов — Составь слова из набора букв
Кстати, о рекламе. Её много, она идёт после каждого уровня, после каждой подсказки. Но чаще всего ролики короткие. И если ты втянулся в игру, то терпеливо ждешь, деваться некуда 😛
Повар слов — Составь слова из набора букв
Игра неплохая, бесплатная, съедает время и вызывает зависимость. Будьте осторожны, не попадитесь в ловушку повара
Исследуйте все сочетания букв и слова, их содержащие
Узнайте, какие слова образованы из сочетаний букв.
Инструкции
- Добавляйте буквы ниже, пока не получите нужный набор букв (от 2 до 7 букв).
- Щелкните ссылку, выполняющую нужный запрос для текущей комбинации букв.
Выбрать следующую комбинацию
- А
- Б
- С
- Д
- Е
- Ф
- г
- ЧАС
- я
- Дж
- К
- л
- Н
- О
- п
- Вопрос
- р
- С
- Т
- U
- В
- Вт
- Икс
- Д
- Z
Вариант расшифровки | Слова расшифрованы из вариантов букв | Вариант Scrabble Word
Вариант — это слово Scrabble. |
Вариант — это слово Words with Friends. Слова с Друзьями Балл за вариант: 10 баллов. |
Слова, образованные расшифровкой букв ВАРИАНТ
Выше приведены результаты расшифровки варианта. Используя генератор слов и расшифровщик слов для букв V A R I A N T, мы расшифровали буквы, чтобы создать список всех слов, найденных в Scrabble, Words with Friends и Text Twist. Всего мы нашли 67 слов, расшифровав буквы в вариантах. Нажмите на эти слова, чтобы узнать, сколько баллов они стоят, их определения и все другие слова, которые можно составить, расшифровав буквы из этих слов. Если можно расшифровать одно или несколько слов со всеми введенными буквами плюс одна новая буква, они также будут отображаться.
Бескрашированные слова с использованием букв
v a r i a n t плюс еще одна букваОпределения
Вариант 1. что -то немного отличаются от других из того же типа |
слова, которые начинаются с вариантом | слов, которые заканчиваются варианта | слов, которые содержат слов |
О программе | T&C | Конфиденциальность | Контакты |
SCRABBLE® является зарегистрированным товарным знаком. Все права на интеллектуальную собственность в отношении игры в США и Канаде принадлежат компании Hasbro Inc., а во всем остальном мире — компании J.W. Spear & Sons Limited из Мейденхеда, Беркшир, Англия, дочерняя компания Mattel Inc. Mattel и Spear не связаны с Hasbro. Words with Friends является торговой маркой Zynga. Allscrabblewords.com никоим образом не связан с играми SCRABBLE®, Mattel, Spear, Hasbro, Zynga или Words with Friends.