Alek�ei Matiu�hkin

сделано с умом



Про очевидные решения

Friday, 27 Oct 2023 Tags: 2023pro

Есть такая игрушка Wordle. Игроку дается шесть попыток, чтобы угадать слово из пяти букв. В рамках каждого хода нужно предложить существующее пятибуквенное слово. Угаданные буквы помечаются: зеленым, если буква угадана на своем месте, и желтым, если такая буква есть, но в другой позиции.

Разумеется, когда эта игрушка только появилась (год назад? больше?) — нашлись мамкины оптимизаторы, написавшие скрипты решения (зачем?). Ради интереса, я заглядывал в те решения, до которых мог дотянуться. Все до единого использовали неверный алгоритм: каждая следующая попытка содержала все уже угаданные буквы.

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

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

Начать нужно с двух слов, содержащих разные буквы, и закрывающих большинство гласных (если мы решаем головоломку не на чешском, конечно) и самых частотных согласных. Мне придумались слова «query» и «mango». Их хватает для уверенного отгадывания, но, наверняка, есть варианты лучше (конкретно: без «q»). На третьей попытке уже станут видны примерные очертания слова (в английском языке нечасто попадаются оконечные «q», например). Если угаданных букв мало, третья попытка должна, скорее всего, заигрывать «i» и какой-нибудь экзотический «h». Если достаточно — третья попытка тратится на элиминацию большинства доступных слов. Например, если мы открыли «a», «e» и «m» не на своих местах, то имеет смысл не пробовать все варианты типа «××ame» один за другим (и выйти за пределы разрешенного числа попыток) — но придумать слово, содержащее все самые возможные варианты: «forbs», например, или «buffs», чтобы одним ударом убить «flame», «blame» и «shame».

Четвертая попытка в 95% случаев будет выигрывающей.


В последнее время я больше люблю Nerdle — там примерно то же самое, только с цифрами. Мне обычно хватает начала «12+35=47», но если важно количество попыток — лучше будет задействовать в первой строке два знака разных арифметических операций. Дальнейший алгоритм не отличается от описанного выше для вордла — никак.


К чему я это? Да к тому, что эта стратегия очень полезна в повседневной жизни. Например, если нужно купить несколько продуктов, обычно продающихся в разных магазинах, но по воле случая могущих оказаться в одном. Или при проектировании проекта: первый шаг — максимальное покрытие вариантов, второй — отсечение от этой глыбы мрамора — заведомо лишнего. Да много, где, даже в личной жизни. Поэтому я решил записать эти нехитрые приемы и поделиться.


  ¦