Спортивное программирование

Спортивное (олимпиадное) программирование — интеллектуальное соревнование по решению различных задач на ЭВМ, для решения которых необходимо придумать и применить какой-либо алгоритм и/или программу на одном из языков программирования. Как правило участникам выдается комплект из нескольких задач. Задача считается решённой, если участники смогли составить программу, которая правильно работает на тестах, подготовленных жюри. Тесты участникам неизвестны. Олимпиады бывают личные и командные. В командных олимпиадах обычно участвует 3 человека и им на всё время олимпиады предоставляется 1 компьютер для решения задач. Для проведения подобных соревнований используются турнирные системы, например Contester и eJudge [1].

В спортивном программировании существует несколько дисциплин и форматов соревнований, но классическим считается ACM ICPC – формат международной студенческой олимпиады по программированию. Каждой команде из трех участников предоставляется один компьютер без доступа в Интернет, а также комплект задач (обычно 9–13), которые команда должна решить в течение пяти часов. Задачи, по большей части, абстрактны, их содержание сводится к описанию входных данных и того, что требуется получить на выходе. Команда должна предоставить решение задачи в виде программы на одном из установленных языков программирования (Java, C++), решение проверяется с помощью набора тестов, содержание которых не известно участникам. Кроме того, программа должна укладываться в ограничения по объему используемой памяти и времени выполнения. Задачи охватывают различные области дискретной математики, алгебры, геометрии и математического анализа. Побеждает команда, решившая как можно больше задач за наименьшее время и сделавшая, при прочих равных условиях, наименьшее количество неудачных попыток сдачи решения. Правила очень просты, однако за хорошим результатом всегда стоят годы тренировок, десятки тысяч строк написанного кода и тысячи прочитанных страниц [2].

История

Международный командный чемпионат по программированию уходит своими корнями в соревнование, проводившееся в Техасском университете в 1970. Свой нынешний облик чемпионат принял в 1977 году, когда первый финал был проведен в рамках ежегодной конференции ACM по информатике, и с тех пор проводится ежегодно.

Чемпионат проводится под эгидой ассоциации вычислительной техники (ACM). Начиная с 1989 года, организацией соревнований занимается университет Бэйлора. В разное время спонсорами соревнований становились такие компании, как Apple, AT&T и Microsoft, однако с 1997 года по настоящее время генеральным спонсором является компания IBM.

С 1977 по 1989 в олимпиаде преимущественно участвовали команды вузов из США и Канады. К настоящему моменту олимпиада превратилась во всемирное соревнование: в 2009 году в ней приняло участие 7109 команд из 88 стран, 100 из которых сошлись в борьбе за главный трофей в финальном турнире. Количество команд продолжает расти на 10-20 % в год, так что в будущем соревнования обещают стать ещё представительнее.

Россия и такие страны бывшего СССР, как Азербайджан, Армения, Беларусь, Грузия, Казахстан, Киргизия, Латвия, Литва, Узбекистан, Эстония, входят в Северо-Восточный Европейский регион, ежегодно делегирующий на финальный турнир свои лучшие команды. Квота региона по количеству команд до 2013 года ежегодно увеличивалась: на финал 2011 было отправлено 12 команд, на 2012 — 16 команд, на 2013 — 19 команд, на 2014 — 17 команд [3].

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

Не считая ACM ICPC, состязания по спортивному программированию не связаны напрямую с системой образования, то есть в них также принимают участие и профессиональные программисты. Популярное состязание по спортивному программированию в мире — ресурс TopCoder, на котором регулярно проводят раунды (SRM), по результатам которых формируется рейтинг участников, а также ежегодный TopCoder Open. Появившийся позднее российский ресурс Codeforces (англ.) также проводит регулярные раунды, по результатам которых также формируется свой рейтинг.

Крупные ИТ-компании проводят регулярные и как правило личные соревнования по программированию.

Google -Google Code Jam

Facebook - Facebook Hacker Cup

Яндекс — Яндекс.Алгоритм - с 2011 года

Mail.ru — Russian Code Cup - с 2011 года

ВКонтакте - VK cup - с 2012 года

КРОК — Чемпионат по программированию

Личный опыт участия

Лично я принимал участие в нескольких онлайн турнирах таких как — Timus Online Judge и Яндекс.Алгоритм,а также в одном региональном этапе ACM ICPC — Открытом кубке ДонНУ по программированию.

Выдающихся результатов достичь не удалось, однако даже от участия в таких мероприятиях остается ценный опыт и яркие впечатления, особенно от «оффлайн» состязаний.

Открытый кубок ДонНУ по программированию

В рамках кубка проводилось несколько состязаний, по разным форматам:

1. Командный турнир по спортивному программированию - формат ACM ICPC.

2. Личное первенство по программированию - формат ACM ICPC, только личное участие.

3. Первенство по быстрому программированию - состязание на скорость - за правильное решение участинику начисляют баллы, однако, каждые 5 мин участник с минимальным кол-вом баллов покидает соревнование.

4. Конкурс по программированию робототехнических комплексов - командное состязание - в течении 5 часов нужно разработать программу, которая потом загружается в робота. Задача программы - пройти лабиринт с препядствиями.

Также в рамках кубка проходил ряд тематических семинаров и мастер-классов, организованных ведущими IT-компаниями Донецка, такими как BinaryStudio, 2GIS, CSU Group.

Очень хотелось бы в будующем принять участие в подобном мероприятии, еще больше хотелось бы, чтобы оно прошло в стенах моего родного вуза - ДонНТУ. Ну а пока остается только смотреть фотографии и ностальгировать.

Наша команда(в первом ряду)

Наша команда(в первом ряду)

Робот, которого мы программировали

Робот, которого мы программировали

Этап быстрого программирования

Этап быстрого программирования

Ссылки

1. Wikipedia - Олимпиады по программированию

2. ИТФИ - Cпортивное программирование

3. Wikipedia - Международная студенческая олимпиада по программированию