Wordalot уровень 115
Привет всем, вот мы сегодня с Wordalot, новая захватывающая викторина для Android. Это совершенно новая игра, разработанная MAG Interactive, которая также разработала Wordbrain, Wordbrain Themes и Ruzzle. Эта игра не похожа на игру Wordbrain, в которой все, что вам нужно сделать, это угадать, какие слова отображаются на каждом уровне и скользить пальцем через них, чтобы сформировать слово. В игре Wordalot у вас есть изображение, представленное на каждом уровне, и вам нужно выполнить уровень, основанный на том, что вы видите на этой картинке. Если что-то не хватает, пожалуйста, напишите нам ниже, и мы будем рады помочь вам! Просто используйте форму поиска ниже, чтобы найти свой ответ.

Ответ / решение :
Стопка
Ремень
Обувь
Брюки
Джинсы
Деним
Половицы
Вельвет
Шнурки
Другие ответы этого пакета

(2595 голосов, средний: 3,60 из 5)
Взламываем Ball Sort Puzzle

Определение кружочков при помощи OpenCV
Ball Sort Puzzle — это популярная мобильная игра на IOS/Android. Суть её заключается в перестановке шариков до тех пор, пока в колбах не будут шарики одного цвета. При этом шарик можно перетаскивать либо в пустую колбу, либо на такой же шарик.
Так случилось, что я в неё залип. Очнулся примерно через месяц, на 725 уровне. Он мне никак не давался — насколько бы глубоко я ни пытался продумать свою стратегию. В итоге — с этим вопросом я вышел в интернет, и заодно выяснил несколько интересных особенностей головоломки.
Во-первых, — игра бесконечна почти бесконечна. По крайней мере уже сейчас на YouTube есть прохождения всех уровней вплоть до 5350, а в телеграмме гуляют скриншоты 10к+ уровней. Вторая особенность, и вот это уже некрасиво, — не у всех уровней есть решение.
Ну это ни в какие ворота — против нас играет коварный ИИ. Нужно действовать соответственно!
Придумаем алгоритм, решающий эту головоломку (Python)
Научимся парсить скриншот игры, чтобы скармливать алгоритму задачки (OpenCV)
Напишем телеграм бота, который будет принимать скриншоты и возвращать решения
Выстроим CI/CD через GitHub Actions и задеплоим бота на Яндекс.Функции
Алгоритмическое решение задачи
Решать такую задачу было весьма занимательно. Поэтому предлагаю заинтересованному читателю попробовать решить её самостоятельно.
Я же в первую очередь решил побить проблему на сущности. Это сделает алгоритм чуть более элегантным, а также поможет в будущем парсить скриншоты игры:

Beta-редактор хабра ломается на рендеринге emoji :poop:
Для решения будем использовать метод поиска с возвратом (Backtracking).
Решение задачи методом поиска с возвратом сводится к последовательному расширению частичного решения. Если на очередном шаге такое расширение провести не удается, то возвращаются к более короткому частичному решению и продолжают поиск дальше. Данный алгоритм позволяет найти все решения поставленной задачи, если они существуют.
В случае с нашей игрой это метод применяется так: мы рекурсивно обходим все возможные перестановки шариков (move) до тех пор, пока
Либо нас не выкинет наш критерий остановки — решённый пазл
Либо в нашем хранилище состояний ( states ) не будет всех возможных перестановок — в таком случае решения нет
Алгоритм достаточно прямолинейный и далеко не всегда выдаёт оптимальное решение. Тем не менее он справляется с решением большинства задачек из игры за 1 сек.
Проверим алгоритм на чём-нибудь попроще:

Алгоритм в действии
Полная версия программы доступна на github.
Распознавание скриншотов игры
Мы будем работать с .jpg картинками двух видов

Скриншоты уровней игры
Каждый чётный раунд игры состоит из 11 колб и 36 шариков, а нечётный — 14 колб и 48 шариков. Чётные и нечётные раунды отличаются расположением колб, но на счастье всё остальное у них одинаковое — по 4 шарика в колбе, 2 колбы пустые, цвета используются одни и те же.
Первое, что хочется сделать — это обрезать рабочую область, оставив только колбы с шариками. В противном случае наша программа за шарики может принимать элементы управления, фон или рекламу. Для этого отрежем по четверти сверху и снизу изображения.

Рабочая область
Теперь будем искать кружочки. В библиотеке OpenCV ровно для этих целей существует метод HoughCircles. Чтобы его использовать нужно перевести изображение в чёрно-белый вид, а также «эмпирически подобрать» параметры поиска. Чтобы найденные кружочки потом расфасовать по колбам, нормализуем и отсортируем их.

Отсортированные шарики слева-направо, сверху-вниз
Дальше будем определять цвет шарика.
Из-за того, что Telegram жмёт картинки мы не можем просто взять цвет центрального пикселя — он может быть артефактом компрессии. Поэтому найдём доминирующий цвет, — тот который в кружочке встречается чаще всего.
Найденные кружочки
Этот доминирующий цвет мы будем сравнивать с изначально заданными цветами, и искать ближайший. В данной задаче нам на помощь приходит Евклидово расстояние и теорема Пифагора: если представить цвет точкой в трёхмерном пространстве, то расстояние до любой другой точки этого пространства:
Посчитаем такое расстояние до каждого из изначально заданных цветов и найдём минимальное
Далее нам остаётся только распределить шарики по колбам. Итоговый class ImageParser доступен на github.
Преобразуем программу в Telegram Bot
Узнать про то, как сделать телеграм бота на Python можно сразу из нескольких статей на хабре. Я лишь опишу пару нюансов, с которыми столкнулся.
Так как наш бот хостится на Яндекс.Функции — триггером к его запуску будет запрос на заданный нами webhook.
Whenever there is an update for the bot, we will send an HTTPS POST request to the specified url, containing a JSON-serialized Update.
Если в сообщении есть массив photo , то можно увеличить вероятность распознавания шариков выбрав фотографию с максимальным весом:
Чтобы скачать картинку, придётся сделать 2 запроса к Telegram API
В остальном же всё просто — получаем картинку, скармливаем её парсеру и затем алгоритму-решателю.
Отмечу ещё один нюанс: телеграм очень строго следует политике экранирования спецсимволов. Для Markdown это:
To escape characters ‘_’, ‘*’, ‘`’, ‘[‘ outside of an entity, prepend the characters ‘\’ before them.
Любой такой неэкранированный символ — и вы не увидите ответа в телеграм-чате. И останется только гадать — является ли это ошибка интеграции или вот такой коварный баг. Будьте осторожны.
Деплой бота в Яндекс.Функцию
Про создание Я.Функции также есть отличная статья от @mzaharov. Там подробно описан процесс заведения функции, а также установки вебхука для телеграмм бота.
Я расскажу как сделал Continuous Delivery при помощи GitHub Actions. Каждая сборка мастера увенчивается деплоем новой версии функции. Такой подход заставляет придерживаться модели разработки GithubFlow с его главным манифестом
Anything in the master branch is always deployable.
Каждая сборка мастера состоит из 3ёх этапов
lint (black, flake8, isort, mypy) — проверка кода на соответствие всем стандартам Python 2020
test — тестируем программу с помощью pytest, поддерживая качество и покрытие кода
deploy — непосредственно заливаем новую версию приложения в облако
Деплоить будем с помощью Yandex-Serveless-Action — уже готового Action для использования в своих пайплайнах
Переменные окружения программы и сборки спрячем в GitHub Secrets на уровне репозитория.

Результат
Бота можно найти в telegram по позывному @ballsortpuzzlebot.
Присоединяйтесь к маленькому community любителей этой игры в telegram. Бот был добавлен в группу и внимательно следит за всеми отправленными картинками.
Бонус! Уровни, у которых нет решения
Lvl 4091
Lvl 6071
Мой алгоритм умывает руки — говорит что перебрал все возможные комбинации и решения нет. Возможно это баг алгоритма.. или QA-отдел мобильной игры просто забил на эти уровни, так как не предполагал, что кто-то так далеко зайдёт)
Заключение
Для меня это был интересный опыт скрещивания технологий (Telegram API + Python + OpenCV + Lambda). Надеюсь он окажется полезен кому-нибудь ещё.
Найденные баги, предложения по оптимизации алгоритма, или даже PR в репозиторий крайне приветствуются
WOW Guru Аху-Тонгарики Уровень 115 Ответы
Похоже, вам нужна помощь с игрой WOW Guru. Да, эта игра не простая, а иногда и очень сложная. Вот почему мы здесь, чтобы помочь вам. Именно поэтому этот сайт создан для того, чтобы предоставить вам помощь с WOW Guru Аху-Тонгарики Уровень 115 ответами. Он также имеет дополнительную информацию в качестве советов, полезных хитростей, читов и т.д. Эта игра была создана командой Fugo Games, которая придумала много отличных игр для Android и iOS.
Если вам нужны ответы на другие уровни, смотрите страницу WOW Guru Аху-Тонгарики ответы.