Дом ребусов

Все работы
Утро начинается не с кофе.

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

Недавно я заинтересовался, что происходит в жанре, и слегка приуныл. Ребусы составляли все кому не лень, но правил не помнил почти никто. А правила есть, и они точные. Запятая в ребусе — инструмент (а я похоже зануда)) и хвостик у неё всегда смотрит в сторону от рисунка: это не украшение, это тоже часть записи. Обо всём этом можно было написать статью. Я написал. Потом ещё несколько.

Так появились уроки, группа в ВК. Люди приходили, решали, некоторые оставались.

Ответы в группе принимал чужой плагин. Он слушал ленту и ловил совпадения — тупо, посимвольно. Знаков препинания не понимал, пробелов не прощал. Приходилось объяснять людям, что отвечать надо не как им удобно, а как удобно плагину. Дальше было хуже: Список правильных ответов рос, появлялись повторы и ложные срабатывания, ответы то были ко всем опубликованным ребусам… Мне хотелось своей механики, нормального учёта, рейтингов. Я упирался в чужие ограничения примерно каждый раз, когда придумывал что-нибудь интересное.

Поэтому — свой сайт. Фреймворк выбрал тот, которого не знал, — Laravel. Логика, приём ответов, соревновательная часть, рейтинги. Делал, тестил, переделывал, переделывал ещё раз. Зато ограничивала меня теперь только собственная фантазия и умение придумать алгоритм.

Прием ответов. С подсказками… и знаками препинания.

Первым делом починил то, чего не хватало. Ответ на ребус принимался с пробелами, дефисами, знаками препинания. Человек имеет право написать её по-своему, и система обязана его понять — при этом честно зафиксировав, кто был первым.

Дальше выяснилось, что одного рейтинга мало. Рейтинг всегда хвалит одного и того же — самого быстрого и самого давнего. Пришлось разложить мотивацию на несколько независимых механик. Общий зачёт копится годами. Недельный обнуляется каждый понедельник — и в понедельник любой новичок стартует наравне с ветераном. Достижения выдаются отдельно: за скорость, за регулярность, за темы, за количество решённого. Человек, который не выигрывает гонку, всё равно получает своё — за то, что приходит каждый день или дожал сотый ребус.

Ачивки за достижения. На мобилке тоже удобно.

Авторизацию сделал через ВК и пока (увы) только через ВК. Причин две. Оттуда пришли почти все пользователи, и заставлять человека регистрироваться заново — верный способ его потерять. Плюс чужая авторизация избавляет от спамеров: пусть их отсеивает тот, у кого на это есть возможности. Подружить сайт с VK API оказалось отдельным квестом — он меняется, когда захочет, без предупреждения и вменяемой документации.

Сейчас на сайте больше трёхсот ребусов, и они регулярно пополняются. Уроки, ребусы и маскот —енот учёный — придуманы мной от первой строчки до последнего пикселя. Имени у енота до сих пор нет.