TopCoder Open — это личный чемпионат по программированию, который в этом году включает в себя шесть направлений соревнований. Непосредственно спортивному программированию здесь посвящены категории Algorithm и Marathon, и в рамках обоих треков участники должны решить предложенные задачи, используя языки программирования Java, C#, C++ или Python. Отличие в том, что «марафонцам» на это выделяется гораздо больше времени: решение задач для отборочных этапов занимает несколько недель, а для очного тура — 12 часов. Соревнования в категории Algorithm же длятся всего полтора часа. Остальные треки TopCoder Open посвящены другим направлениям процесса разработки: в рамках трека Development компании-партнеры турнира предлагают денежные призы за создание цельного продукта, в ходе First2Finish программистам необходимо добавлять дополнительный функционал или исправления в программу, сайт или инфраструктуру, участникам трека IU Design предстоит с нуля разрабатывать дизайн-концепты, а участникам UI Prototype — «приделывать» back-end к уже имеющемуся дизайну.
«Категории чемпионата TopCoder Open охватывают почти все направления работы программиста, и это хорошо, потому что участники зачастую пробуют свои силы в новых категориях. Если у тебя в голове есть образ конкретного программного продукта, важно понимать, как он может быть реализован у конечного пользователя, какие бывают ограничения у компонентов системы, которые будут работать с твоим кодом. Это отличный способ стать программистом-универсалом, чтобы для воплощения своих идей не привлекать коллег по цеху и убедиться в том, что ты сам можешь написать продукт целиком — от фронтенда до базы данных», — рассказывает тьютор кафедры компьютерных технологий Университета ИТМО Лидия Перовская.
Отбор на участие в финале TopCoder Open традиционно проходит в режиме онлайн, но с прошлого года организаторы решили проводить очные этапы чемпионата по тем категориям, которые популярны в регионе: к примеру, с 6 по 7 августа в Джокьякарте (Индонезия) проходил региональный зачет по дизайну, а Университет ИТМО — альма-матер чемпионов мира по спортивному программированию — организовал проведение российского регионального этапа в категории Algorithm. Мероприятие в Санкт-Петербурге стало заключающим после серии очных соревнований в Пекине (Китай), Нью-Йорке (США) и Джайпуре (Индия).
В число финалистов TopCoder Open войдут восемь лучших участников онлайн-туров, которые стартовали еще в марте. Еще два места зарезервированы для участников очных региональных соревнований: десятки победителей каждого из региональных этапов разыграют их в ходе так называемого Wildcard Round. На первый взгляд, очные турниры — самый простой способ попасть в финал за минимальное количество шагов, так как в онлайне необходимо обойти тысячи программистов из разных стран. Однако на очные мероприятия съезжается цвет мирового спортивного программирования — победители всевозможных чемпионатов, олимпиад и хакатонов, и занять первые строчки рейтинга здесь гораздо сложнее.
3 сентября на петербургский этап TopCoder Open Algorithm пришли 56 человек. У каждого — свой ноутбук, кто-то захватил тройник или удлинитель: по опыту предыдущих соревнований, розеток хватает не на всех. Для участия в турнире нужно зайти на «арену» TopCoder: все задания, разработанные эксклюзивно для регионального этапа, раздаются, выполняются и проверяются здесь. За решение каждой выдается определенное количество очков, и «стоимость» задачи начинает снижаться сразу после того, как участник открыл условия. Для самой простой задачи с максимальной стоимостью в 250 очков нужно вычислить наименьшее количество ходов, за которое можно победить противника в пошаговой RPG, если у игрока в распоряжении два вида атаки — normalAttack и buffedAttack. По словам Лидии Перовской, решить ее может даже обладатель базовых навыков программирования; однако турнирных задач три, две оставшиеся значительно сложнее, и в общей сложности на фазу кодинга отводится всего 85 минут.
«Когда участник отправляет ответ, результат ему сообщается только по итогам предварительных тестов — по сути, в его решение подставляются только условия из задачи. Но после фазы Coding наступает очень важная фаза Challenge, в ходе которой каждый участник проверяет на ошибки чужое решение. Если он найдет случай, в котором решение выполняется неверно или слишком долго, он может заработать дополнительные очки и отыграть время, потерянное во время фазы кодинга. Для этого нужно придумать тест, на котором решение даст неправильный ответ: например, если оппонент не рассмотрел частный случай, в котором какой-то из входных параметров будет иметь значение „0“, и делит на него, — объясняет Лидия Перовская. — Забавно то, что эти случаи могут быть добавлены к общему набору тестов, и твое решение может „упасть“ на твоем же тесте. Часто бывает и так, что человек своим тестом „заваливает“ большое количество чужих решений, но зарабатывает только 50 очков за одного оппонента».
По результатам петербургского TopCoder Open Algorithm решения всех трех задач отправили только два участника — двукратный чемпион ACM ICPC Геннадий Короткевич и двукратный серебряный медалист ACM ICPC Петр Митричев, однако системные тесты прошло только решение Митричева. Шестеро из десятки победителей регионального тура — выпускники и студенты Университета ИТМО: Адам Бардашевич, Борис Минаев, Нияз Нигматуллин, Илья Збань и Вадим Семенов. Кроме того, в число лучших вошли студенты СПбГУ Айдар Сайранов и Игорь Пышкин, выпускник МФТИ Яков Длугач и выпускник МГУ Егор Куликов. Сразиться за участие в финале TopCoder Open с победителями других региональных раундов им предстоит 10 сентября.
Добавим, что финал TopCoder Open-2016 пройдет в Вашингтоне (США) с 18 по 21 ноября.