Студенческие соревнования по программированию в Югорском государственном университете

ВЕСТНИК ЮГОРСКОГО ГОСУДАРСТВЕННОГО УНИВЕРСИТЕТА

2011 г. Выпуск 3 (22). С. 7-9

УДК 004.42

СТУДЕНЧЕСКИЕ СОРЕВНОВАНИЯ ПО ПРОГРАММИРОВАНИЮ В ЮГОРСКОМ ГОСУДАРСТВЕННОМ УНИВЕРСИТЕТЕ

А. В. Алексеев, В. А. Карелин, С. В. Синицын

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

В современном мире регулярно проводятся разнообразные соревнования по программированию. Они проходят по разным правилам - студенческие или школьные соревнования, командные или личные и т. д., но наибольшую популярность завоевали два типа соревнований - по правилам командных студенческих соревнований и личных школьных олимпиад.

Командные чемпионаты мира по программированию среди сборных команд высших учебных заведений проводятся с 1977 г. под эгидой международной организацией ACM (Association for Computing Machinery - Ассоциация вычислительной техники), которая была основана в 1947 г. сотрудниками Пенсильванского университета, создавших первый в мире компьютер ENIAC.

Схема организации чемпионата включает три этапа: подрегиональный, региональный и финальный. В подрегиональном этапе могут участвовать все студенты, создавшие команду и подавшие заявку на соревнование. В региональный этап выходят несколько лучших команд из каждого подрегиона.

Команды-победительницы и призеры региональных групп выходят в финал и разыгрывают звания чемпионов мира, Европы, Северной Америки и других континентов.

За более чем тридцатилетнюю историю состязаний сформировались международные правила этих соревнований, в соответствии с которыми команде, состоящей из трех участников, предоставляется один компьютер и предлагается в течение 5 часов решить максимальное число из предложенных задач. Количество задач обычно варьируется от 8 до 11. Побеждает команда, решившая наибольшее число задач, а в случае равенства числа решенных задач - команда, затратившая меньше времени на их решение.

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

Таким образом, главной задачей команд является не просто решение как можно большего количества задач за минимальное время, но и допущение минимального количества неудачных попыток решения.

По подобным правилам, помимо чемпионата Мира проходят такие соревнования, как:

• Чемпионат Урала, проводимый Уральским государственным университетом;

• Всесибирская олимпиада по программированию, проводимая Новосибирским государственным университетом;

• многие другие.

В Югорском государственном университете существует команда преподавателей и студентов, поддерживающих данное движение. Команды вуза участвовали в таких соревнованиях, как Командный чемпионат мира по программированию в 2009 и 2010 годах. Наш округ приписан к Западно-Сибирскому подрегиону, в который входят Алтайский край, Ханты-Мансийский АО, Ямало-Ненецкий АО, Кемеровская, Курганская, Новосибирская, Омская, Томская, Тюменская области. Проводит четвертьфинальные соревнования в этом подрегионе Новосибирский государственный технический университет дистанционным способом (посредством сети Интернет).

Оба раза мы проходили этот этап. В 2010 году мы заняли 12-ое место (из 52-ух участвовавших команд), обойдя такие вузы, как ТУСУР, Омский ГУ, Кемеровский ГУ, Алтайский ГУ, Сибирский государственный индустриальный университет. Тем самым мы завоевывали право на участие в Региональных (полуфинальных) соревнованиях.

Региональные соревнования проходят в четырех городах одновременно - в Санкт-Петербурге, Барнауле, Ташкенте и Бишкеке. В этих соревнованиях участвует вся Россия и практически все страны СНГ (за исключением Украины и Прибалтики) - не менее двухсот команд, и данное соревнование имеет название «Северо-восточное европейское региональное соревнование». Несколько лучших команд (обычно 12-13) по итогам этого этапа получают право на участие в финальном соревновании Чемпионата мира.

Нам ни разу не удалось пройти региональный этап, но российские команды регулярно являются победителями или призерами финальных соревнований - за последние 16 лет шесть первых мест (3 раза - СПбГУ ИТМО, 2 раза - СПбГУ, 1 раз - Саратовский ГУ) и дополнительно 42 медалей (медалями награждаются первые 10-13 мест). Всего в финальные соревнования проходят порядка ста команд со всего мира.

В 2011 году финал чемпионата прошел 30 мая. Пять российских команд завоевали медали:

• команда СПбГУ заняла 4 место и получила золотые медали;

• команда Нижегородского ГУ заняла 5 место и получила серебряные медали;

• команда Саратовского ГУ заняла 6 место и получила серебряные медали;

• команда МГУ заняла 10 место и получила бронзовые медали;

• команда Уральского ГУ заняла 11 место и получила бронзовые медали.

Также мы участвовали в Открытом чемпионате Урала - пожалуй, втором по значимости соревновании в России после Полуфинала чемпионата мира. Данный чемпионат проводится Уральским государственным университетом уже 15 лет. В нем участвуют многие команды России и ближнего зарубежья. К тому же мы участвовали в многочисленных Интернет-соревнованиях.

Для успешного участия студентов в соревнованиях по программированию в Югорском государственном университете проводятся факультативные занятия. На этих занятиях студенты изучают основные алгоритмы, структуры данных и методы решения олимпиадных задач, прорешивают большое количество всевозможных задач, в том числе задания прошедших соревнований. Также среди студентов регулярно проводятся тренировочные соревнования. Слушатели данного курса регулярно участвуют в различных соревнованиях, таких как региональная личная предметная олимпиада «Интеллект» (г. Тюмень), Открытая Всесибир-ская олимпиада по программированию (г. Новосибирск), четвертьфинал Чемпионата Мира (подрегиональные соревнования) и другие.

При проведении таких соревнований встает проблема проверки присланных участниками решений (представляющих собой исходные тексты программы). Вначале решение компилируется (вручную или автоматическим способом, используя тестирующую систему). Если при компиляции программы возникли какие-нибудь ошибки, не позволившие ее скомпилировать, то данная попытка решения засчитывается как неудачная (отвергнутая). Если решение скомпилировалось, то данная программа запускается на наборе тестовых данных, отдельно для каждого теста. Единичный тест представляет собой пару правильных входных и выходных данных. Тесты уникальны для каждой задачи, при этом участники не имеют к ним доступа напрямую. Таким образом, жюри может оценить правильность работы решения,

сравнивая выходные данные проверяемой программы с правильными выходными данными из теста.

При проверке решения проверяемая программа должна уложиться в определенные временные ограничения и ограничения по занимаемой оперативной памяти и вывести выходные данные в строго заданном формате.

Если проверяемая программа не уложилась в ограничения времени или памяти, вывела данные в неправильном формате, вывела неправильный ответ или во время ее работы произошла ошибка, то результат прохождения теста считается отрицательным.

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

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

Таких систем для проведения соревнований существует довольно много. Для студенческих соревнований - это системы Уральского государственного университета (acm.timus.ru), Саратовского государственного университета (codeforces.ru), Университета Вальядолид (Испания, uva.onlinejudge.org) и другие. Для школьных - это системы МЦНМО (informatics.mccme.ru), Санкт-Петербургского государственного университета информационных технологий, механики и оптики (neerc.ifmo.ru/school), Олимпиады по информатике в ХМАО - Югре (acmu.ru) и другие.

В Югорском государственном университете существует подобная проверяющая система. Основана она на свободно распространяемой системе ejudge, созданной в Московском государственном университете Александром Черновым. Главные особенности данной автоматизированной проверяющей системы следующие.

• Проведение турниров с автоматической проверкой задач по разным системам правил: ACM (командные студенческие олимпиады), KIROV, OLYMPIAD (школьные олимпиады), MOSCOW.

• Позволяет проверять не только программы, но и задания с коротким ответом и задания с выбором одного из нескольких вариантов ответов.

• Одновременное проведение нескольких турниров.

• Поддержка виртуальных турниров.

• Защищённое исполнение программ.

• Доступ к серверам турниров из командной строки (возможность написания скриптов для управления турнирами).

• Открытые исходные коды.

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

Созданный нами сервер регулярно используется для проведения студенческих и школьных соревнований, тренировок и практических занятий, таких как:

• региональный этап Всероссийской олимпиады школьников по информатике;

• школьные предметные Интернет-олимпиады;

• командные соревнования школьников;

• подготовка школьников к сдаче ЕГЭ;

• студенческие тренировки.