Я обыграл свою бабушку в Wordle — вот почему вас это должно волновать

Игра

Wordle — относительно простая игра. Если вы когда-либо играли в Mastermind, это должно звучать знакомо. Цель состоит в том, чтобы разгадать загадочное слово, используя как можно меньше догадок. Загадочное слово меняется каждый день. Вот два примера догадок.

После угадывания цвет каждой буквы меняется.

  • Зеленый — буква правильная.
  • Желтый — буква есть в слове, но не в этом месте.
  • Серый — такой буквы в слове нет.

Как видите, существует максимум шесть догадок. Если вы не можете найти загадочное слово в течение шести попыток, вы проиграли. Каждый день я соревнуюсь с бабушкой, чтобы найти слово за как можно меньшее количество попыток.

Это совершенно поразило меня. Я почувствовал непреодолимое желание создать приложение, которое могло бы найти загадочное слово за минимально возможное количество попыток.

Как я это сделал

Прежде всего, нам нужен список английских слов. Сначала я использовал список кукурузных початков, но большего успеха мне добился список Двила.

Для этого проекта я решил использовать Rust просто потому, что был уверен в своей способности быстро сделать MVP.

Оба списка слов, которые я использовал, отформатированы как последовательность отдельных слов, разделенных \n символами. В Windows (это то, что я использую) у них также есть надоедливые маленькие символы \r.

Wordle сильно ориентирован на буквы. Я могу удалять элементы из списка слов, основываясь на том, какие буквы, как я знаю, отсутствуют в загадочном слове (это серые буквы в игре), и я могу удалять элементы, основываясь на том, какие буквы, как я знаю, есть в загадочное слово (оранжевые или зеленые буквы), но во многих случаях остается много возможных слов. Мне нужно отсортировать слова по тому, насколько вероятны их буквы.

Для этого я подсчитываю, как часто каждая буква появляется в списке слов, и присваиваю каждому слову балл в зависимости от того, как часто встречаются его компоненты.

Первым шагом в программе является загрузка списка слов и подсчет букв:

Использование по умолчанию HashMap (который использует SipHash, который не подходит для односимвольного поиска), вероятно, не самый лучший с точки зрения производительности, но это всего лишь игрушечная программа, и она не должна быть самой быстрой. в мире.

Далее нам нужно просмотреть список слов и исключить слова, содержащие серые буквы. Вот функция, которая помогает это сделать:

Он принимает несколько разных фрагментов символов:

  • Слово: слово, которое мы хотим проверить.
  • Найдено: это фрагмент, содержащий буквы, которые мы нашли (зеленые), с символами " " (пробел) в местах, характер которых нам неизвестен.
  • Нет: это фрагмент, содержащий буквы, которые, как мы знаем, отсутствуют в загадочном слове.
  • Должен: это фрагмент, содержащий букву, которая в загадочном слове, но мы не знаем ее положение.
  • маски: это серия масок. Здесь мы удаляем каждое слово, в котором есть буквы, соответствующие любой маске. Это полезно для исключения слов из списка слов, содержащих знаки препинания, и слов, содержащих оранжевые буквы, но в местах, где мы знаем, что их нет.

Теперь все, что нам нужно сделать, это запустить каждое слово в списке слов и посмотреть, соответствует ли оно нашим уже известным символам, обновляя содержимое каждого фрагмента новой информацией после каждого предположения.

Почему вы должны заботиться

Это звучит как бесполезная проблема. Это. Это не принесет пользы никому, кроме меня, и я определенно не буду использовать это, когда буду соревноваться со своей бабушкой.

Тогда зачем ты это сделал?

Бесполезные ответы на бесполезные проблемы полезны. Они учат нас, как совершенствоваться без давления реальных ставок. Они также просто весело.

Это тоже отражение. Как бы вы подошли к этой проблеме в прошлом? Как улучшилось ваше мышление. Может быть, будет немного великодушно сказать, что этот маленький решатель Wordle является ключом к самоанализу, но я не думаю, что это так уж далеко.

Want to Connect?
If you like art, or photography, also check out my Instagram.