Соревнования по программированию

На студенческих соревнованиях по программированию чаще всего  решением задачи является программа, написанная на допустимом языке программирования (C++ или Java). Задача считается решенной, еслипрограмма выдала правильный ответ на всех заранее подготовленных жюри тестах. Задачи на соревнованиях по программированию строго формализованы. Во всех задачах приведены ограничения на входные данные, гарантируется их корректность. Также для каждой задачи даны ограничения по времени работы решения и ограничение на размер используемой памяти.

Командные соревнования

На студенческих соревнованиях по программированию команде из трех человек предоставляется один компьютер на 5 часов и 10-12 задач. Чем больше задач решила команда - тем выше она в рейтинге. При равном количестве решенных задач команды ранжируются по штрафному времени — суммарному количеству минут, потраченных на каждую задачу, от момента начала соревнования до момента сдачи задачи. За неудачную попытку решения команде начисляются 20 штрафных минут. В первые 4 часа соревнования участникам доступна текущая таблица результатов, за час до конца она перестает обновляться для сохранения интриги.

Чемпионат мира по программированию ACM ICPC

Самым престижным студенческим соревнованием является чемпионат мира по программированию (International Collegiate Programming Contest, ICPC), который проводится Ассоциацией вычислительной техники (Association for Computing Machinery, ACM) с 1970 года.

До 1989 года в соревнованиях преимущественно принимали участие студенты университетов Канады и США. Каждый год количество команд, участвующих в данном мероприятии, растет на 10-20 %: В 2014 году в соревнованиях уже приняла участие 10681 команда из 2286 университетов 94 стран.

Россия участвует в ACM ICPC с 1993 года. За восемнадцать лет участия в чемпионате российские студенты девять раз становились чемпионами мира. В 2013 и 2014 финалы чемпионата мира по программированию ACM ICPC проходили в России: в 2013 году в Санкт-Петербурге и в 2014 году Екатеринбурге соответственно.

Отбор на финальные соревнования проходит в несколько этапов: все университеты мира разбиты по территориальному признаку на регионы, в которых проводятся полуфиналы. В крупных регионах проводятся четвертьфиналы. Для каждого полуфинала ежегодно определятся квота на количество команд, которые примут участие в финале от этого региона. От Северо-Восточного европейского региона, в который входит Россия, в финал проходят примерно 15 команд.

В финале университет может представлять только одна команда.

Для команд ВШЭ участие в ACM ICPC начинается с Московского четвертьфинала (обычно проводится в середине октября). За ним следует полуфинал в Санкт-Петербурге (начало декабря).

Другие командные соревнования

По тем же правилам проходят и другие студенческие соревнования по программированию. Студенты участвуют в них не только ради славы и призов, но и для тренировки к ACM ICPC.

В России наиболее популярными являются Всесибирская олимпиада им. Поттосина, чемпионат Урала, ICL. Отборы на эти олимпиады проходят онлайн.

Всесибирская олимпиада по информатике и программированию им. Поттосина

Всесибирская олимпиада по информатике и программированию им. Поттосина проводится в Новосибирске для команд из вузов и школ России ближнего и дальнего зарубежья. Цель данной олимпиады – привлечение талантливой молодежи к исследованиям в области информатики и программирования. К участию в очном туре не допускаются студенты, дважды участвовавшие в финале международного чемпионата АСМ ICPC.  Всесибирская олимпиада проходит в два тура: заочный и очный. При успешном прохождении  заочного тура команда приглашается принять участие во втором туре. Олимпиада состоит из двух туров: традиционного (по правилам ACM) и тура, на котором командам предлагается решить одну необычную задачу (например, составить как можно больше слов при игре в “Балду”).

Всесибирская олимпиада проходит в ноябре.

В 2014 году во Всесибирской олимпиаде по программированию приняло участие 48 команд из университетов и школ со всей России.

Чемпионат Урала по программированию

Открытый чемпионат Урала по программированию проводится с 1997 года в Екатеринбурге по правилам ACM, к участию допускаются студенты и школьники. Каждая команда должна состоять из 3 человек, не обязательно из одних и тех же учебных заведений. К участию не допускаются студенты, дважды участвовавшие в финалах ACM ICPC.

Чемпионат Урала проходит в апреле.

В 2014 году в чемпионате Урала приняло участие 39 команд, представивших ведущие университеты России.

Турнир ICL

В открытом чемпионате Татарстана по спортивному программированию среди школьников и студентов (турнир ICL)  могут участвовать команды, которые прошли отборочный тур. Чемпионат проходит по правилам ACM.

Отборочные туры в 2015 году прошли 15 и 22 февраля. 24 и 25 февраля были объявлены результаты отборочных туров. Пробный тур пройдет 14 марта в Казани, основной тур запланирован на 15 марта 2015 года.

В 2014 году в финале турнира приняли участие 30 команд.

VK Cup

В 2015 году компания ВКонтакте проводит свое второе соревнование по программированию. В компании часто используется метод “парного программирования”, когда два человека пишут код за одним компьютером. Это позволяет избежать многих ошибок как в проектировании программ, так и непосредственно в реализации. Такую модель разработки компания решила использовать и в своем соревновании. Участвовать в нем можно как лично, так и в составе команды из двух человек. Отбор проходит  онлайн, в финале примут участие 20 команд, участникам которых должно быть от 16 до 23 лет. Первый приз - более миллиона (2 20 ) рублей.

Открытый Кубок имени Е.В. Панкратьева

Кроме очных командных соревнований по программированию регулярно проходят онлайн соревнования Открытого Кубка. Все участники разделены на “площадки” и пишут соревнования под надзором тренера. В год проходит около 15 этапов по правилам ACM, каждый из них длится 5 часов. Каждый этап приносит очки первым 30 командам, примерно как в Формуле-1.

Этапы Открытого Кубка часто являются отбором на очные (“онсайт”) соревнования, такие как турнир ICL или Чемпионат Урала.

Студенческие команды могут участвовать в спонсорском зачете Открытого Кубка. Компания Яндекс оплачивает поездки лучших команд на этапы ACM ICPC и сборы по подготовке к соревнованиям.

Личные соревнования

В личных соревнованиях чаще всего  могут принимать участие не только студенты, но и аспиранты, выпускники, профессиональные программисты и вообще все желающие. Правила на них могут незначительно отличаться от ACM, но идея остается та же: побеждает тот, кто решает больше задач, а среди решивших одинаковое количество - тот, кто делает это быстрее и с наименьшим количеством попыток.

Соревнования чаще всего проводят крупные IT-компании, с целью не только популяризации программирования, но и поиска новых сотрудников. Для студентов победа в таком соревновании - отличная возможность попасть на стажировку на очень интересную позицию в компании-организаторе. Сотрудники компании не могут участвовать в “своем” соревновании.

Обычно компании приглашают около 20 лучших участников по результатам онлайн-отборов в свой офис для участия в финале. Несколько сотен лучших по результатам  онлайн-отборов получают по почте памятные призы (зачастую это футболки). У профессиональных спортивных программистов отпадает необходимость покупать футболки, благодаря соревнованиям они заполняют свой гардероб внушительной коллекцией.

Яндекс.Алгоритм

Яндекс.Алгоритм – одно из самых популярных соревнований по программированию, проводится по системе TCM/Time. При такой системе оценки можно получить больше баллов, если не узнавать результат проверки. Поощряются участники, умеющие хорошо тестировать свои программы самостоятельно.

Впервые соревнование прошло в 2011 году. Финал 2014 года состоялся в Берлине, куда были приглашены лучшие 25 участников. Лучшие из лучших получили денежные призы.

Отбор на Яндекс.Алгоритм начинается в мае, а финал проходит в конце августа.

Google Code Jam

Google Code Jam — международное соревнование по программированию, проводимое компанией Google. Впервые GCJ прошел в 2003 году, целью соревнования был поиск светлых умов для возможной работы в компании. В последующие годы в качестве вознаграждения лучшие из лучших получали денежные призы. Основным отличием Google Code Jam  от других соревнований – возможность использования любого языка программирования и среды разработки для решения задач. Когда решение подготовлено, участник запрашивает входные данные и за несколько минут должен с помощью своей программы получить ответ и отправить его в проверяющую систему.

Facebook Hacker Cup  

Facebook Hacker Cup  - международное соревнование по программированию, проводимое Facebook. Слово “хакер” в это случае подразумевает не взломщика, а профессионала очень высокого уровня, способного реализовать то, что кажется чудом. Впервые состоялось в 2011 году. Участники финала приглашаются на стажировку в компанию на все лето.

Russian Code Cup

Russian Code Cup впервые прошел в 2011 году. Чемпионат проводится по правилам ACM, несмотря на то, что это личноесоревнование. Отборы на чемпионат проходят онлайн с марта по июнь, а финал проводится в сентябре. В 2015 году на финал приглашаются 50 лучших участников из России и стран СНГ.

Другие личные соревнования

Кроме перечисленных выше соревнований проходит еще огромное множество соревнований, как чисто онлайн, так и с очным финалом.

Например, Иранская ИТ-компания Bayan проводит свое соревнование Bayan Programming Contest, на которое приглашается по одному лучшему участнику от страны (всего 20 участников).

Многие компании проводят соревнования не разрабатывая свою платформу, а используя уже существующую, популярную среди программистов. Чаще всего это платформа codeforces. На ней устраивают онлайн соревнования многие компании, например:

ZeptoLab - разработчик игры Cut The Rope, в их соревновании ко всем задачам сделаны забавные иллюстрации с Ам-Нямом,

MemSQL - разработчик системы управления базами данных,

RocketFuel - компания специализирующаяся на анализе больших данных и искусственном интеллекте,

ABBYY - разработчик систем распознавания текстов (OCR), словарей и переводчиков.

Победители и призеры этих соревнований имеют все шансы сделать карьеру в этих компаниях.

Регулярные личные онлайн-соревнования

В настоящий момент существуют две основные платформы проведения регулярных соревнований: Codeforces и TopCoder. В соревновании может принять участие любой желающий, туры длятся около 2 часов и проходят почти еженедельно. Во многом эти соревнования похожи на шахматные турниры. Ведется рейтинг участников, также похожий на шахматный рейтинг Эло. Время проведения соревнований варьируется (тур может проходить как в будний вечер, так и в воскресный день). В России более популярен Codeforces, т.к. соревнования на нем проходят в более удобное для Евразии время в отличие от американского TopCoder. В каждом из туров принимают участие 4-6 тысяч программистов.

“Рейтинг на Codeforces” и “рейтинг на TopCoder” из способа повышения самооценки превратились в один из критериев приема на работу. Часто просьба указать свой логин (он называется хендл) в этих системах встречается в анкете при трудоустройстве на позицию разработчика в таких компаниях как Яндекс и Google.

Другие соревнования

Кроме соревнований по решению чисто олимпиадных задач в той или иной вариации существуют и другие соревнования по программированию, на которых предлагаются более технологичные задачи и задачи без точного решения. Рассмотрим некоторые из них.

Challenge 24 и Marathon 24

Два очень похожих соревнования проходят в Венгрии и Польше соответственно. Команде из трех человек предлагается за сутки решить как можно больше необычных задач. Например, команде нужно получить фотографию снимка с экрана, на которую проецируется подготовленное участниками изображение, наиболее похожее на оригинал. Эту задачу можно решить только ночью - днем не хватает яркости проектора.

В отборочных турах часто встречаются задачи на анализ изображений, видео или текста. Например, нужно посчитать количество конфеток M&M’s, процесс высыпания которых из пачки снят на видео. Или посчитать количество взорвавшихся зерен попкорна по звукозаписи с кухни.

Marathon 24 проводится осенью, а Challenge 24 - весной.

Russian AI Cup

Целью участника Russian AI Cup является разработка искусственного интеллекта для управления той или иной командой. Например, командой танков и артиллерийских установок или отряда спецназа для уничтожения противника. Встречаются и более мирные задачи, например, запрограммировать хоккейную команду. Для успешного участия необходимо не только реализовать выигрышную стратегию (которую до этого нужно придумать), но и тщательно подобрать параметры, рассмотреть необычные ситуации.

Russian AI Cup проходит осенью и состоит из нескольких этапов. Постепенно размер команды, управляемой искусственным интеллектом, увеличивается, а правила усложняются.

CTF (Capture The Flag)

Соревнования по компьютерной безопасности, названные в честь игры на местности, первоначально состояли в том, чтобы добыть “флаг” у другой команды (тем или иным способом скопировать файл с компьютера противника) и защитить свой. В настоящее время задачи CTF намного разнообразнее. Например, по звуковому файлу или изображению необходимо получить ключ к решению задачи, который закодирован стеганографическим методом. В качестве развлечения участникам одного из CTF соревнований предлагалось выбраться из запертой комнаты, ключ от которой должен был принести запрограммированный участниками робот. Существует множество таких соревнований, основным российским CTF является RuCTF.

Соревнования по обработке больших данных

Благодаря анализу больших данных можно добиться недостижимых ранее результатов. Многие компании предлагают огромные денежные призы за решение задач из их практической деятельности. Прогнозирование пробок по текущей ситуации и известной загруженности дорог в прошлые дни, поиск текста на изображении для сервиса онлайн-объявлений, предсказание вероятностей обращения в больницу для страховых компаний и многие другие реальные задачи предлагаются на сервисе kaggle. Один человек или команда специалистов в области анализа данных должна за определенное время отправить свои результаты прогноза или анализа. В случае успеха команда должна описать свой алгоритм и получить приз (суммы вознаграждения доходят до миллиона долларов). Kaggle также является платформой для проведения ежегодного конкурса Яндекс.Математика.