Я делаю boggle -пользовательскую игру. Пользователю предоставляется сетка таких букв:
O V Z W X
S T A C K
Y R F L Q
Пользователь выбирает слово, используя любые соседние цепочки букв, например, слово "STACK" по средней линии. Затем используемые буквы заменяются машиной, например. (новые буквы в нижнем регистре):
O V Z W X
z e x o p
Y R F L Q
Обратите внимание, что теперь вы можете писать "OVeRFLoW", используя новые буквы. Моя проблема: какой алгоритм я могу использовать для выбора новых букв, которые максимизируют количество длинных слов, которые может произнести пользователь? Я хочу, чтобы игра была забавной и включала правописание, например. 6 буквенных слов иногда, но если вы выбираете плохие буквы, игры включают в себя пользователя, просто написание 3 буквенных слов и не получение возможности найти более крупные слова.
Например:
-
Вы можете просто случайно выбрать новые буквы из алфавита. Это не работает.
-
Аналогично, я обнаружил, что сбор случайно, но использование частот букв от Scrabble не очень хорошо работает. Это лучше работает в Scrabble. Я думаю, поскольку вы менее ограничены в порядке, в котором вы используете буквы.
-
Я пробовал иметь набор списков, каждый из которых представлял один из штампов из игры Boggle, и каждая буква была выбрана со случайной стороны штампа (я также задаюсь вопросом, могу ли я законно использовать эти данные в продукте). Я не заметил, что это хорошо работает. Я полагаю, что стороны кости Боглега были выбраны каким-то разумным образом, но я не могу найти, как это было сделано.
Некоторые идеи, которые я рассмотрел:
-
Сделайте таблицу того, как часто пары букв встречаются вместе в словаре. Ради аргумента, скажем, Е видно около 30% времени. Когда вы выбираете новое письмо, я произвольно выбираю письмо, основанное на частоте этого письма, которое происходит рядом со случайно выбранным смежным письмом на сетке. Например, если соседняя буква E, новая буква будет "A" 30% времени. Это должно означать, что есть много приличных пар для использования, разбросанных по карте. Возможно, я мог бы улучшить это, создав таблицы вероятностей буквы между двумя другими буквами.
-
Как бы то ни было, поиск слов, которые могут быть записаны в текущей сетке, при этом новые буквы будут подстановочными знаками. Затем я заменил подстановочные знаки письмами, которые позволяли писать самые большие слова. Я не уверен, как вы это сделаете эффективно.
Любые другие идеи приветствуются. Интересно, есть ли общий способ решить эту проблему и какие другие игры используют слова.
Редактировать: Спасибо за отличные ответы! Я забыл упомянуть, что я действительно стремлюсь к низким требованиям к памяти/процессору, если это возможно, я, вероятно, буду использовать словарь SOWPODS (около 250 000), и моя сетка сможет 6 x 6.