Признание…

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

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

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

Итак, я закодировал это, и вот что я придумал.

Подход

Я собираюсь создать функцию, которая принимает несколько параметров. Я объясню каждый параметр, используя свою игровую доску -

  1. «correctLetters» — это наш первый параметр. Это будет строка длиной 5. Она будет представлять зеленые буквы, которые у меня есть до сих пор, и ничего более. Таким образом, любая незнакомая мне буква становится «*».

Для доски выше «correctLetters» = «**E**»

2. "antiStrings" - это для учета всех желтых догадок. Это будет массив, содержащий несколько строк, показывающих, где я угадал правильную букву, но не в том месте.

Для приведенной выше доски «antiStrings» = [ *T**E, ***RT ]

3. «AvailableAlphabet» является последним параметром и дает символы, которые еще доступны мне для использования. (алфавит минус выделенные серым цветом буквы)

Для доски выше «доступный алфавит» = «QWERTYUIPDFGHJKZXCVBM».

Кодекс

Теперь, чтобы построить его:

Во-первых, мне потребуется библиотека (массив) английских слов. Этот содержит ~ 275 000, и я фильтрую его только до пятибуквенных слов (~ 12 500).

Затем в строке 4 определяется основная функция wordleAssist с указанными выше параметрами.

Строки 8–10: убрать чувствительность к регистру (библиотека в нижнем регистре).

Строки 14–30: анализируйте антистроки, чтобы создать два элемента:

  1. объект, который может хранить несколько антизначений для каждого индекса слова. Таким образом я организовал каждую букву, которая не может находиться в заданном индексе окончательного ответа.
  2. строка, в которой будут храниться эти значения для последующего использования при определении того, какие буквы должны быть в конечном слове.

1 и 2 — по сути, одна и та же информация, но я держу их отдельно, потому что их цели различаются, и таким образом наш последующий код может быть немного аккуратнее.

Теперь (начиная со строки 30) я завершу функцию серией аналитических шагов, чтобы сузить массив слов:

В строках 30–83 я отметил простые шаги, которые эффективно уменьшают список слов до гораздо более удобного размера.

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

Интересно наблюдать, как быстро значения в правильных и неправильных местах сужают размер потенциальных результатов. Прямо сейчас я не вижу, чтобы это надежно привело меня к уровню двух предположений.

Однако обычно после двух строк данных я получаю достаточно узкую область и могу определить вероятных кандидатов для ответа в третьей строке.

Дополнительные материалы на PlainEnglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter и LinkedIn. Присоединяйтесь к нашему сообществу Discord.