Пока большинство программистов участвуют в обычных хакатонах, доблестные дроиды из Мобайлапии устраивают «Шрекатон»: спасают принцессу посредством программирования и решения логических задач.
9 декабря мы решили провести хакатон, чтобы немного отвлечь специалистов от рутинной работы и мотивировать на новые подвиги. Брать готовые задачи или аналогичные рабочим – скучно, поэтому я придумал свой сюжет. Теперь хочу поделиться подробностями игры и рассказать о том, как поглумиться над сотрудниками организовать нескучный хакатон своими силами.
Все разработчики MobileUp разделились на смешанные команды по 2 человека: iOS-разработчики с Android-разработчиками, Android-разработчики с R&D-инженерами, Backend-разработчики c iOS-разработчиками и так далее. Первый челендж состоял в том, чтобы решить, на каком языке программировать.
На рабочих местах я спрятал QR-коды, которые открывали доступ к сказочной легенде, герои которой имеют поразительные сходства с реальными работниками компании. И хотя надпись гласила: «все имена и события выдуманы, совпадения считать случайными», – я всё же решил ввести маленький дескриптор (или список действующих лиц) для читателей Хабра:
Список действующих лиц Шрекатона
Шрекозавр – альтер-эго нашего руководителя проектов Олега Широкова. Он занимается капоэйрой и любит оценивать шутки по балловой системе вроде: «Это шутка на соточку».
Беатическая царевна-Олягушка – персонаж, прообразом которого стал менеджер по маркетингу и PR, c редким именем Беата.
Сержуй I Великолепный – несложно догадаться, что речь идёт о генеральном директоре MobileUp, которого у нас принято называть Серж.
Няшный котик – директор по развитию Виктор Черногоров. Он сам так себя прозвал.
Айлёша Попович – iOS-разработчик Алексей Немыченков.
Very Тролль – iOS Team Lead Виталий Зарубин с никнеймом Very Zloy. Известен своими редкими, но едкими комментариями.
Кос Тянь – Android Team Lead Константин Цховребов (@terrakok).
Тимон – сурикат из мультфильма «Король Лев», или iOS-разработчик Николай Тимонин.
Полиндроид – iOS-разработчик Полина Демидова. Говорят, что она очень любит печеньки и всегда носит их с собой.
Dark Lord – автор этого безумия, технический директор MobileUp, Евгений Валеев.
Пендальф Белый – в противовес тёмному Жене у нас есть светлый Женя Денисов, руководитель проектов.
Будем знакомы. Итак, начнём нашу историю:
«В некотором царстве, в двадцать первом (по версии Тэглайна) государстве Мобайлапии случилось горе – злобный Шрекозавр похитил Беатическую царевну-Олягушку, и заточил её (не в смысле съел) в своем замке Парад-Дур. Расстроился король Мобайлапии Сержуй I Великолепный, но не приуныл и решил действовать. А так как король «Великолепный», а не «Храбрый», то не пошёл он сам биться с Шрекозавром, а объявил награду тому, кто спасет принцессу.
Много разных iОблестных дроидов откликнулось – все хотели царство и пол царевны в награду. Пожаловали и легендарный русский богатырь Айлёша Попович, и великий китайский дроид Кос Тянь, и знаменитый крымский Тимон, и умудренный опытом Very Тролль, и даже старый добрый вологодский Полиндроид. Не явился только убелённый сединами славный Пендальф Белый – нечем ему было сражаться с силой нечистой, потому что в его арсенале были только знания html, с которыми он мог победить разве что маленьких пехепешников, да и то только спящих.
Известно, что Шрекозавр абсолютно непобедим физическими средствами, ибо занимается он единоборством Байдой-Орейрой. Но у него абсолютно отсутствует чувство юмора, и ходят слухи, что если рассмешить его на 400 баллов (никто не знает, сколько это и как это измерить), то он лопнет от смеха, и принцесса будет спасена.
technical note:
Есть достоверные сведения, которые гласят, что сделать это нужно за два хода, идущие подряд. Иначе до Шрекозавра дойдет, что происходит, и он сожрет петросяна к чертям собачьим. И единственное спасение – это отбежать от него на расстояние одной клетки. Да и вообще он настолько свирепый, что жрёт всех подряд, кто стоит к нему вплотную дольше двух ходов (т.е. к концу второго хода). Баллы смеха накапливаются в течении двух ходов от всех игроков. Победителем является тот, вклад шутки которого первым привел к превышению 400 баллов.
Все игроки от рождения имеют примерно одинаковые массу (~50) и чувство юмора (~100), которые можно прокачать, собирая разные ништяки с поля:
- Гриб – вызывает острые приступы олегофрендии, дает +20 к массе и -30 к чувству юмора.
- Кикер – дает +25 к массе и +25 к чувству юмора.
- Печенька – прибавляет +15 к массе.
- Беатический лифчик – принцесса помогает разыграть Шрекозавра, +50 к юмору, но только в шутках к Шрекозавру.
- Няшный котик – абсолютно бесполезное существо, но красивое и милое, так и тянет его взять с собой, но учти – он моментально аннигилирует всю твою массу и полностью обнулит чувство юмора. При перемещении на клетку, в которой сидит котик, он сам запрыгивает в руки. Если в руке есть предмет, то он выпадает.
technical note:
Ходят слухи, что котик предпочитает левую руку, а так же есть ненулевая вероятность, что котик не будет запрыгивать на руки.
- Трусы Шрекозавра – ничего не дают и ничего не забирают. Но однажды их увидев, это невозможно забыть :)
- Око Серверона – его нельзя взять и унести. Но находясь на одной с ним клетке, появляется способность видеть всё поле.
- Dark Lord – как и всякая Тёмная материя, он абсолютно непредсказуем. Взяв его с собой, можно как получить прибавку к массе и юмору, таки и потерять их. Но ты не узнаешь этого, пока не попробуешь.
technical note:
Опытным путем было установлено, что масса обратно пропорционально влияет на юмор – чем больше у существа масса, тем сложнее его рассмешить. Но это не точно.
Так как злодей очень свиреп, то для увеличения вероятности освобождения принцессы, все iOблестные дроиды разбились на пары.
technical note:
Все iдроиды должны запускаться на разных девайсах — т.е. иметь разные IP-адреса, даже если они в одной команде.
На каждой клетке есть забор, на котором можно написать (находясь в этой клетке), что угодно (единственное ограничение – слово должно состоять из трех букв не более 10 символов), и это сообщение смогут прочитать все, кто находится в радиусе трех (т.е. квадрат 5х5) клеток от него [Немного занудства: надпись на заборе стирает предыдущее сообщение с этого забора].
Еще немного занудства:
- размер поля заранее неизвестен;
- в самом начале игроки располагаются на поле случайным образом, но игроки одной команды – в пределах видимости друг друга;
- каждый ход игрок получает актуальное состояние игрового поля в радиусе трех клеток, т.е. квадрат 5х5;
- за один ход игрок может переместиться на одну свободную клетку в любом направлении, включая диагональные, написать на заборе и совершить одно из действий: взять/бросить предмет или рассказать шутку сопернику/Шрекозавру в соседней клетке;
- если шутка понравится сопернику, он так долго смеется, что следующий ход пропускает;
- на клетке может располагаться стена, другой игрок или часть замка Шрекозавра (в общем случае он занимает более одной клетки и имеет произвольную форму) – тогда на эту клетку переместиться нельзя;
- так как у каждого дроида только две руки и ни одного кармана, то взять за раз можно не более двух нишяков.
technical note:
В случае отправки команды, содержащей больше действий, чем положено за один ход, будут выполнены только первые, входящие в лимит. Остальные – будут проигнорированы.
Всех, кто дочитал сей документ до конца, поздравляю с началом приключений! Вперед к свершениям!»
На этой радостной ноте кончается легенда и начинается API. Он есть в свободном доступе. Кому интересно, можете посмотреть его здесь.
Как всё проходило (небольшой фотоотчёт)
Ключ к легенде.
Ещё никогда наши разработчики не были так близки (в смысле, обычно они не сидят парами). Сражаются с Шрекозавром под надзором Его Темнейшества.
Кажется, кто-то нашёл «Трусы Шрекозавра»...
А вот и сам Шрекозавр :-)
Шрекатон прошёл успешно, принцесса спасена.
Ход игры
Игра длилась около 5 часов.
Для создания ботов команды использовали следующие языки:
- Java
- Objective-C
- Python
- JavaScript
Победителем стал iOблестный дроид Ильич Филинович.