Все олимпиады по программированию можно разделить на два класса: индивидуальные и командные олимпиады. Но в олимпиадах и того, и другого класса, выполняются, по сути, одни и те же действия, а именно:
- участник решает поставленные задачи в течение некоторого фиксированного времени;
- программный код, который является результатом решения, в откомпилированном виде передается жюри;
- жюри проверяет его на заранее созданном наборе тестов и сообщает результат тестирования;
- в конце олимпиады формируется рейтинг и распределяются призовые места.
Учитывая это, на стадии проектирования было решено выделить следующую функциональность системы:
- Создание профиля олимпиады.
Каждая проводимая олимпиада имеет некоторый информационный контекст, описывающий ее. Сюда входят: название олимпиады, дата проведения, продолжительность, список всех команд (участников) с кратким описанием каждого из них. Помимо общей информации каждая олимпиада имеет свой набор задач и тестов к ним. Результатом же проведения олимпиады является турнирная таблица. Все это вместе: общая информация, задачи с тестами и турнирная таблица составляют профиль олимпиады, который хранится в базе данных и используется системой в момент проведения олимпиады.
- Поддержка истории всех проводимых олимпиад с возможностью просмотра итогов любой из них.
- Непосредственное проведение олимпиады, включающее в себя:
- прием, регистрацию, компилирование и проверку корректности присланных решений на тестах;
- оповещение участников о результатах тестирования;
- формирование и выдача рейтинга в режиме реального времени;
- возможность заморозки рейтинга за некоторое время до окончания олимпиады;
- возможность дисквалификации участника во время проведения олимпиады.
Все это, безусловно, можно делать вручную, но ручной способ имеет ряд существенных недостатков. Прежде всего, это неудобство в способе передачи откомпилированного решения жюри. Команда теряет часть своего времени на организационные вопросы, вместо того, чтобы посвятить его решению задач. Во-вторых, недостатком является и то, что жюри приходится проверять решения в ручном или полуавтоматическом режиме (при помощи вспомогательных программ, позволяющих, например, запустить программу на наборе тестов). Это может привести к ошибкам при проверке и, как следствие, неточностям в турнирной таблице.
Так как все решения отдаются жюри с рук на руки, то нет никакой возможности объективно отслеживать время, потраченное командной на каждую задачу. В результате этого, возрастает вероятность того, что несколько участников олимпиады займут одно и то же место.
Преимущества же автоматизированного подхода очевидны:
- автоматизация рутинных действий;
- оперативность;
- беспристрастность проверки;
- рейтинг подсчитывается по формальным правилам;
- более точный учет результатов олимпиады все присланные решения сохраняются в базе данных в той временной последовательности, в которой они присылались на проверку;
- снижается вероятность того, что несколько участников займут одинаковые места;
- возможность проведения заочных туров с использованием глобальной сети Internet;
- возможность проведения отложенных олимпиад.
Последний пункт в приведенном выше списке представляется особенно интересным, так как аналогичные идеи могут быть применены при организации не только олимпиад по программированию, но и всех перечисленных в предыдущей главе видов деятельности. Результаты проверки теста (контрольной работы, задачи) становятся доступными сразу после отсылки их на сервер.
Назад | На главную | Вперед
|