WeekChallenge
У нас в компании раз в полгода проводится внутренняя конференция, чтобы все были в курсе новостей, поделиться опытом и просто пообщаться. Последние время перед конференцией организуют дополнительную активность – WeekChallange. Это такое соревнование, как видно из названия длительностью неделю. Проходило три раза и каждый раз новый формат.
Первый раз было что-то вроде Викторины. Через api получали простую задачу, например, перевести фразу, указать, правильно ли написано ться/тся, определить часовой пояс города, распознать цитату в аудиозаписи, вычислить математическое выражение, найти недостающее слов в стихотворении и т.д. И отправить ответ. За правильные начисляли очки, за неправильные – снимали.
Второй раз управляли ботами на большой карте, строили фермы и дрались с зомби. Отличительной чертой этого челленджа была абсолютно не предсказуемая смена правил. В первый день надо было быстро захватывать клетки, на следующий – учится строить фермы, а через три дня срочно учиться драться с зомби. А чтобы было больше веселья – смена правил происходила в 4 утра!
Третий раз участвовали в космическом сражении. В кубе 30*30*30 клеток надо было построить флот и разгромить противника.
Во всех трех мы участвовали. Писали обработки и целые конфигурации, показывали хорошие результаты в общем зачете. Но третий челлендж сильно отличался от первых двух. О нем и расскажу.
Heroes of Bresenham’s might and Chebychev’s magic
Тут не было api с которым можно было б общаться по rest. Нужно было консольное приложение, которое на вход получается данные об окружении и отдает решение о следующем ходе. Плюс ограничение по памяти и всего один процессор. Для того чтобы передать очередное решение – требуется отправить исходники. Как видно – 1с здесь не очень подходит. Платформа с трудом запустится на таких ограничениях, да и доступ на запись к диску был отключен! Мы уже подумали, что этот челлендж пройдет мимо нас. НО! Потом вспомнили об OneScript. Он отлично подошел для такой задачи.
Разработчики челленджа все проверили и дали добро. Мы будет участвовать высылая файлы в формате .os.
Большое спасибо Андрею Овсянкину (//infostart.ru/profile/267027/). В честь него (ну и мема) мы назвались «Саня, это бобер!!!», но коротко все звали просто «Бобры».
Еще играли ребята на Python, JavaScript, но большая часть на C#.
На этапе подготовки и обсуждения участия столкнулись с таким:
Если у большей части участников был готовый стартовый шаблон, то нам пришлось учиться ходить. Первый несколько дней был объявлен Lighting – игрокам научиться летать/стрелять/не вылетать за пределы куба, а организаторы тестировали как работает система. Мы покодили и даже заняли 6 место в общем зачете (всего 18 команд участвовало в Lighting).
Потом дали два дня на передышку и почистить код. После этого играем уже на боевом сервере.
Основное соревнование
Ура! Старт соревнований! Мы закрепились на 6 месте и пытались оптимизировать свои стратегии. Хотя бы заставить корабли на скорости не вылетать из арены. А тут внезапный сюрприз. Текстовый квест! По три-четыре задания в день. За решение задания – новый агрегат для корабля: щит, двигатель, бластер. Или помощь в виде кусков кода. На C#. Спасибо, очень помогло.
Наша команда разделилась. Кто-то решал задачи, кто-то пил код. Представляете каково это. Только придумал стратегию, а кто-то решает очередной квест и получаем новую плюшку. Которую надо протестировать и добавлять или нет к стратегии. А времени, напоминаю, всего неделя.
Один раз получился рембо
Мы много чего перепробовали. Стоили корабли звездочкой, летали колбасой, просто стояли на месте. Главная проблема была – столкновения. Постоянно. Или в противника врежемся или друг в друга. В общем выше 6 места мы не поднимались. Только вниз.
В одном из квестов получили – Острый нос. Оружие повышало урон от столкновения. Ну и как говориться: «Твой позорный недуг мы в подвиг определим». Решили попробовать таранить! И внезапно – пошло. Мы были на 2-3 третьих местах. И заметили, что ни у кого нет обработки такой ситуации, все ориентировались на дальний бой. А в еще одном квесте выиграли улучшений двигатель. Собрали флот из кораблей с двумя штыками и супер-двигателем. Но на боевую стратегию не выкладывали. Наша стратегия до финала выглядела вот так
К финалу добрались без потерь. Решили почти все квесты, один нам так и не дался. На компьютерное обучение и распознавание образов.
Как оказалось, не одни мы прятали стратегию. Тем интереснее было ждать финала. Финал – это прогон последнего загруженного решения без возможности вносить изменения.
Финальная битва
Корабли на старт! Орудия к бою! Понеслась. Сработал ли наш расчет на эффект неожиданности? На все 100%!
Мы уверено шли на вершину таблицы, хотя иногда и проседали. Никто видимо даже не разбирал ситуацию, когда противник будет не убегать, а наоборот – идти в штыковую атаку. Да еще и на огромной скорости. Хотя первое время все думали, что мы - мастера маневров
30 минут волнительного ожидания. Есть команды которым мы проигрываем, но большую часть побеждаем легко. Пересчет очков… И у нас ПЕРВОЕ место!!!
Было очень приятно, что за нас болели и организаторы.
Вот так выглядела финальная таблица
И пример боя. Мы желтые
О чем эта статья?
Итак. О чем же статья? Да просто так. Поделиться опытом, показать, что и на 1с можно удачно выступать на соревнованиях. Главное умение быстро придумать и адаптировать алгоритмы.
У ребят есть желание провести это соревнования на внешнем контуре. Будем надеяться, что у них все получиться. Тогда у всех нас будет возможность побороться и доказать еще раз, что нельзя недооценивать 1с-ников.
А кто-то только окунулся в новый для себя язык.