Комментарии 30
Сейчас в тинек запустили аналог игры. На русском алфавите есть стратегия, всегда приводящая к победе?
Благодаря этой акции от Тинькофф и заинтересовался игрой. Но для русской версии не искал пока стратегию, может чуть позже.
Как раз недавно написал скрипт на Python для помощи в игре. Я выкачал частотный словарь, словарь существительных и частоту использования букв, каждый раз начинаю со слова "осина", так как в нем самые популярные буквы, и дальше уже методом исключения, за 4 дня скрипт пока ни разу не подвёл
По ощущениям, на русском играть гораздо сложнее - в русском больше гласных букв, да и количество букв больше. И кажется, что допустимых в речи комбинаций букв в русском больше.
в русском, в отличие от английского, используются только существительные. А в английском и глаголы, и прилагательные, и наречия, и местоимения, и даже причастие совсем недавно было.
А повторы букв есть? В русском варианте игры есть слова с повторяющимися гласными и даже согласными, поэтому играть приходится с проверкой на повторение, иначе вообще кажется фиг угадаешь
Есть повторы.
Еще отличие - в русском варианте (по крайней мере на сайте belousov что-то там) самые обычные слова, никаких редкоупотребимых. А в английском может быть все, что угодно. Знакомый англичанин иногда пишет мне что-нибудь типа "ну очень странное слово" или "я и забыл, что такое слово есть".
Я наткнулся на русский вариант игры несколько месяцев назад. Через несколько десятков честно решенных слов накидал скрипт, который выбирает 20 самых популярных букв в списке русских пятибуквенных слов и ищет в том же словаре 4 слова, состоящие полностью из них.
Результат: почин, смрад, культ, взбег.
Стратегия: вводить эти слова, пока не откроется 4 буквы, потом находить точное положение этих букв. Пятая почти всегда легко угадывается в конце, когда остальные 4 стоят на местах.
Несколько раз бывало, что после этих 4 слов нет ни одной открытой буквы, но такую экзотику как минимум в половине случаев получалось угадать по неиспользованным буквам.
У меня два начальных слова «океан» и «спирт», иногда получается угадать третей попыткой.
приём
сачок
тяжба
гуляш
выдох
покрываются буквы:
а, б, в, г, д, е, ё, ж, и, к, л, м, о, п, р, с, т, у, х, ч, ш, ы, я
не покрываются:
з, й, н, ф, ц, щ, ъ, ь, э, ю,
покрываются дважды:
а, о, я
Это моя "стратегия".
Но её можно улучшить. Надо иметь не список слов, а что-то типа дерева, в котором выбор следующего зависит от того, какие буквы известны.
если гуляш
заменить на глушь
, то покрытие увеличится на ь
По-моему, слишком большая "база". У меня три слова всего: семья, пират и кулон. В игре у Тинька только один раз не угадал на 4-м ходу, понадобился 5-й, когда было два возможных варианта.
Для случая с пятью словами в базе, если окажется, что подходит 2 варианта, уже не остаётся места для маневра. Например, форма или норма.
Пару месяцев назад заморочился этой задачей, написал алгоритм на питоне.
https://gist.github.com/xneg/4dc9f82cb1822c1d7aaef27143558658
Для https://wordle.belousov.one/ работает за 2-5 попыток, чаще всего 3. Для тинька работает хуже, потому что Тинькофф не случайное слово из условной тысячи выбирает, а загадывает относительно редкие.
В двух словах работа алгоритма. Для каждого слова А в исходной выборке надо получить паттерн для каждого другого слова B, как если бы мы вводили первым слово A, а загадано было бы слово B.
Логично, что паттерны для некоторых слов будут совпадать (особенно, если это все серые). Все паттерны распределеяем по бакетам по количеству. Таким образом, для каждого слова в исходной выборке получаем словарь вида узор: количество повторений. Далее из всех слов выбираем начальным то, у которого узор с максимальным количеством повторений является минимальным среди всех остальных слов, ну, то есть, такой min(max(...)).
Соответственно, именно это начальное слово даже при худшем раскладе максимально уменьшит нам выборку доступных слов. Ну и этот алгоритм повторяется на втором и последующем шагах с учетом уже открытых букв и сильно сократившегося количества доступных слов.
Я написал скрипт на перле, который решает задачу. Подход автора фундаментален, я же поступил проще: начинаю со слова с самыми распространёнными буквами (по статистике моего словаря это коран/оркан/крона), а потом фильтрую список в соответствии с ответами. Почти всегда слово угадывается с 4 попытки, единственное слово, на которое понадобилось 5 попыток – «кабан»:
> я знаю 3274 слов
> оркан
$ xx.++
> я знаю 4 слов
> кулан
$ +xx++
> я знаю 3 слов
> казан
$ ++x++
> я знаю 2 слов
> каган
$ ++x++
> я знаю 1 слов
> кабан
$ +++++
Лучшая стратегия - подсмотреть слово на форуме отгадывальщиков! ;)
Вроде бы (по логике правил) не должно быть слов, в которых одна и та же буква повторяется больше одного раза. Если отфильтровать датасет по таким словам - станет ли меньше «коллизий хэша»?
Можно достать все возможные варианты слов прямиком из исходников Wordle.
Я использую следующие слова: WORLD, EARTH (или HEART), PLONK, MUSIC, FOGGY. В большинстве случаев, позволяют угадать слово уже с 4-й или 5-й попытки.
Прикольно, потому что я и сам недавно только начал играть в эту игру и тоже из-за тинькова, но играю на русском. У меня стратегия такая:
Спрут, камин, выход, желчь. А потому уже думать что может быть если слишком мало букв открылось) и наверное правильнее начинать именно с камина- т.к. по статистике есть подозрение что буквы а,и,к,м,н используются чаще в разных словах, но это тоже нужно проверять
![](https://habrastorage.org/getpro/habr/upload_files/b69/2e9/50f/b692e950f423135c35ec944fa2af813b.png)
Было бы прикольно развить идею и найти оптимальную или близкую к ней стратегию для заданного датасета. Например, Кнут в свое время предлагал хорошую стратегию для классических «Быков и коров», ее можно модифицировать.
А разве можно вводить слова без открытых букв? Или это только русское дополнение?
![](https://habrastorage.org/getpro/habr/upload_files/7e7/f5d/7e0/7e7f5d7e0c89819ec5b33e200a06115b.png)
Возникло желание перечитать "Золотого жука" Э.По. Хорошее применение знания частотности использования букв в английском языкеязыке.
Пофантазирую. Играю в эту игру месяца три, почти каждый день и фиксирую результат. Начало игры - заполняю клетки с первым словом, каждый раз слова новые (за редким исключением - такой комплимент самому себе). И тут из памяти полезло: "метод свободных ассоциаций", "лингвистический ассоциативный эксперимент", "тест Юнга 100 слов". То есть, не пытаются ли люди запустившие эту игру получить некий "портрет" игрока? Публикация эта полезна ещё и тем, что применяя "слова-шаблоны" для решения головоломки, мы исключаем возможность "прочесть" нас.
Мой скрипт для игры от Тинькова работает по следующей логике.
На основании словаря существительных, выбраны все из пяти символов.
Посчитаны количество повторений каждой буквы и составлен рейтинг.
На основе топа букв выбрал топ слов (то есть те в которых максимальное кол-во повторений топ-букв): первое - "кроат", затем в целом равнозначные "норка", "крона" и "оркан". Игру начинаем с ввода одного из этих слов.
После первой попытки, в скрипт отправляю введенное слово, а так же символы угаданные и символы с угаданным индексом.
Скрипт выводит два списка:
1) список слов, которые подходят под угаданные ранее буквы;
2) список слов в которых не встречаются символы, проверенные ранее.
Второе слово ввожу из списка, символы из которых не встречались ранее (ну уже и заглядывая, в рейтинг символов составленный ранее). Вновь указываю угаданные символы и индексы. Скрипт повторно отрабатывает только уже на основе возможных слов, оставшихся после предыдущей попытки, и вновь формирует 2 списка.
Тут уже обычно можно выбрать слово из списка слов, подходящих по угаданные ранее символы и их позиции, так как обычно их остается менее десятка. То есть обычно хватает трех попыток.
Словарь вполне можно было вытащить из оригинального js-кода. На самом деле их два - 2315 слов, которые могут быть загаданы + еще 10657 слов, которые можно ввести.
Wordle или как выиграть за 6 ходов