Как стать автором
Обновить

Комментарии 10

Если посмотреть внимательно на «проигрыши», становится очевидно, что в базе есть несколько слов, отличающихся на одну букву в целевой позиции, скажем, «wound»-«hound»-«bound»-«pound» etc, что нормально для английского языка, у них там такого вагон. По мне, правильно будет ввести второй вариант «угадайки» такого вида: при обнаружении ответа с 1 нулем и 4 двойками собрать из базы все возможные ответы и не перебирать, а запулить «слово» из различных букв этих слов, т.е. в примере с wound послать «hmbpw», получение ответа в 5 нулей выкинет из множества 5 слов, получение единицы или двойки оставит одно. Повторять до победного.
Формально этот же вариант можно использовать для состояния 2 нуля 3 двойки («goner/boxer», «stamp/stash»), удачный подбор может исключить *до* 5 слов, но придется проверять отдельно на наличие нескольких единиц/двоек, скажем паттерн 02022 для goner запулить pmhbn (желательно пихать в паттерн те буквы, которые в оставшемся множестве слов занимают обе позиции в разных словах, причем их предпочтительнее пихать именно на них, так больше инфы получится из 1 или 2 в этих местах, в случае нехватки одной буквы в этом нет проблем) или что-то подобное. А основной алгоритм подобрал красивое начальное слово для 6 букв :)
Апд: потрогал wordle — а она не дает (по крайней мере через веб) посылать «не-слова» — обидно! Придется извращаться, и отправлять вместо hmbpw скажем thumb (3 из 5 букв выбиваются), если вообще даст отправить подобное, мол нет уже t в искомом слове, не пытайтесь.

Даст отправить слово с повторной буквой. Но да, произвольные символы не вобьёшь.

Для "ручной" победы лучшая тактика - первые 3 слова ввести так, чтобы они не имели общих букв. Тем самым максимизируется знание о том, что есть и чего нет в остальных словах.

Даже можно найти эти 3 слова заранее ;)

Для английского языка удобно в эти три слова впихнуть все возможные гласные

А что если попробовать построить решающее дерево [используемое в машинном обучении]?

В качестве вопроса выбрать слово, а в качестве эффективности разделения что-нибудь стандартное, например, gini index или information gain.

Я написал свой алгоритм: имея список из допустимых (=удовлетворяющих всем ответам системы) слов, считаем для каждого слова энтропию (средневзвешенное количество информации, которую можно получить, задав это слово), выбираем слово с наибольшей энтропией. После ответа системы пересчитываем множество допустимых слов.

Сразу вопрос: уперлись вы в *ound, или в *atty (ещё хуже), осталось 4-7 слов, на 2-4 попытки. Как действовать будете?

Сначала хотел ответить, что алгоритм не попадёт в такую ситуацию :).

Но вы правы, я допустил оплошность: выбирать надо из ВСЕХ слов словаря, (а вот энтропию для них считать только по допустимым). (Что характерно, на стадии придумывания алгоритма я так и планировал, а реализовал почему-то с ошибкой).

Тоже сделал через энтропию, прогнал его по всем словам, выходит разгадывает за 3,47 попытки в среднем, так что похоже автор был прав, рубеж в 3,5 попыток преодолим.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории