2. Соревнование
Виды соревнований
ACM ICPC
International Collegiate Programming Contest – международная студенческая олимпиада по программированию
Ограничения на участие
- Командное соревнование (3 человека в команде)
- Допускаются студенты ВУЗов, не старше 24 лет
- Студенты, участвовавшие в финале 2 раза или 5 раз в региональных этапах, не допускаются к участию
Как проходит
- Один компьютер на команду
- 8–12 задач
- 4-5 часов
Необходимо решить максимальное количество задач за отведённое время, имея только один компьютер на трёх человек. При этом решения задач необходимо сдавать за наименьшее количество попыток и максимально быстро.
Как образуется рейтинг
По количеству решённых задач. Если количество решённых задач у команд совпадает, то они сортируются по возрастанию штрафного времени. За час до конца соревнования рейтинговая таблица замораживается, т.е. изменения в ней не отображаются публично.
Как считается штрафное время
- В минутах
- При сдаче задачи к штрафному времени прибавляется текущее время от начала соревнования
- Каждая посылка задачи в тестирующую систему, не дающая статусы AC или CE, добавляет 20 минут к штрафному времени (учитывается только после сдачи задачи)
Как решить задачу
- Запрограммировать её
- Сдать на проверку тестирующей системе
Тестирующая система выдаёт результат:
- AC (Accepted) – решение принято, задача решена
- WA (Wrong Answer) – решение выдало неверный ответ на каком-либо тесте
- TL (Time Limit) – превышено время выполнения решения на тесте
- ML (Memory Limit) – превышено использование оперативной памяти решением на тесте
- RT (Run Time) – ошибка исполнения (возникло исключение)
- CE (Compilation Error) – ошибка компиляции
- PE (Presentation Error) – ошибка в формате выходных данных
Этапы соревнования
- Квалификации на 1/4 финала
- 1/4 финала – соревнование в пределах одного региона страны
- 1/2 финала – соревнование в пределах одной страны
- Финал – международное соревнование
Code warriors challenge
Нужно разработать лучший алгоритм поведения бота в простой игре.
Ограничения
- До 3-ёх участников в команде
Как проходит
- 4-5 часов
- Среда с API, являющаяся, как правило, простой игрой с юнитами
- Нужно разработать лучшую стратегию поведения юнита, чтобы победить
Например, предоставляется среда, являющаяся игрой в 2D танки. Это прямоугольное поле определённых размеров, а у каждой команды свой танк, которым она может управлять с помощью API. Доступны 5 функций управления танком: перемещение на 1 клетку влево/вправо/вверх/вниз и стрельба (вперёд, в зависимости от предыдущего движения танка). Также доступна информация о текущем положении танков других команд. Чтобы вывести танк из строя, необходимо совершить по нему 5 выстрелов. Побеждает та команда, чей танк оказался последним не вышедшим из строя.
Во время соревнования можно протестировать свою стратегию, как с заготовленными ботами, так и с любой выложенной стратегией других участников.
За 1 час до конца соревнования стратегии участников команды не обновляются публично (аналог заморозки таблицы в ACM ICPC).
One elimination (соревнование капитанов)
Цель соревнования – выжить.
Ограничение на участие
- Каждый сам за себя (команда состоит из 1 человека)
Как проходит
- ~6 задач
- 2-3 часа
В отличие от ACM ICPC, в данном соревновании засчитывается количество пройденных тестов на задачах: чем больше суммарное количество верно решённых тестов на задаче, тем выше позиция в рейтинге.
После N минут с начала соревнования каждые T минут последний участник в рейтинге выбывает. Соответственно, прохождение одного нового теста на любой задаче, может продлить Ваше участие в состязании ещё на T минут.
Как решить задачу
Аналогично ACM ICPC, но засчитываются пройденные тесты, а не только полное решение задачи.
Хакатон (продуктовое программирование)
Нужно быстро реализовать работающий продукт.
Ограничения
- Может стоять ограничение на количество участников в команде
- Ограничение на время разработки
Как проходит
- Нужно любым способом решить (частично решить) продуктовую задачу (создать web сервис, приложение, обучить нейронную сеть и т.д.) за отведённое время
- Как правило, можно пользоваться чем угодно и как угодно (использовать любые фреймворки и языки, брать готовый код, генерировать код, используя ИИ и т.д.)
В начале соревнования оглашается цель и задачи проекта, а также критерии его оценивания. Далее за отведённое время необходимо реализовать максимально готовый программный продукт. Завершающим этапом проекта является его презентация и защита. Необходимо быстро (5-7 минут) описать реализованный продукт и продемонстрировать его работоспособность.
Подготовка к соревнованию
Подготовка к соревнованию начинается за 2-4 недели до его начала.
Режим
Перед соревнованием необходимо перестроить режим сна так, чтобы просыпаться без будильника за достаточное время до начала соревнования (с учётом возможной разности часовых поясов).
Обычно соревнования проводятся утром, поэтому необходимо к моменту его проведения нужно стабильно просыпаться (и высыпаться!) к 6:00-7:00.
Тренировки перед соревнованием
За 1-2 недели до соревнования необходимо усилить тренировки. Необходимо усиленно тренировать командное взаимодействие и тактику поведения на соревновании. Если известна тематика соревнования, то стоит больше тренироваться именно в данной области.
Что брать в поездку
- Вода
- Еда (только в транспорт)
- Аптечка
- Ноутбук (желательно)
Из чего состоит аптечка
- Жаропонижающее
- Противовирусное
- Против аллергии
- От расстройства кишечника
- От боли в сердце
- От головной боли
- Ферменты для переваривания
- От ушибов и ран
- Индивидуальные необходимые препараты для каждого участника
Как питаться в поездке
Так, чтобы не голодать, не получить расстройство кишечника и не причинять вред здоровью.
Что иметь с собой на соревновании
- Вода
- Аптечка (необходимая часть аптечки)
- Продукты, позволяющие получить быстрые углеводы:
- Шоколадные батончики (идеально – Сникерс, т.к. в нём находятся орехи)
- Газированные напитки с кофеином (Coca Cola)
- Энергетик (опционально)
Перед началом соревнования
За 30-60 минут до соревнования проводится пробный турнир, цель которого заключается в проверке работоспособности компьютера и тестирующей системы.
В пробном турнире даются элементарные задачи (по типу "считать 2 числа и вывести их сумму") для того, чтобы команда могла протестировать то, что им необходимо.
Что делать на пробном турнире:
- Сдать одну задачу для проверки тестирующей системы
- Настроить среды программирования, если это необходимо
- Всё оставшееся время делать заготовки алгоритмов и структур данных для основного турнира
- Файл с заготовками лучше спрятать, иначе организаторы могут его удалить
Начало соревнования
Продолжительность: 30 минут.
Необходимо разделить задачи для [[5. Чтение и разметка задач|чтения и разметки]] между участниками команды.
Есть 2 варианта поведения на этом этапе:
- Все участники команды читают и размечают задачи
- 2 участника команды читают и размечают задачи, [[3. Команда на соревновании|программист]] продолжает делать заготовки для алгоритмов и структур данных
- Актуально для команд высшей лиги
- Нужен сильный программист
Если участник команды нашёл задачу, которую можно быстро решить:
- Он решает её, отдав неразмеченные задачи другим участникам
- Он быстро объясняет решение [[3. Команда на соревновании|программисту]] и продолжает размечать задачи
- Актуально для команд высшей лиги
- Нужен сильный программист
- Нужно уметь быстро и понятно объяснять решение задачи
Минимальный конечный результат этапа:
- Все задачи размечены
- Каждый должен начать решать свою задачу
Идеальный конечный результат этапа:
- Все задачи размечены
- Решено не менее трёх задач
Середина соревнования
Окончание этапа: за 1-1.5 часа до конца соревнования.
Основная задача этапа – решить максимальное количество задач, организовав и не завалив конвейер.
Конечный результат этапа:
- Решены все простые для команды задачи
- Остались только задачи, которые решаются несколькими участниками команды
Конец соревнования
Начало этапа: за 1-1.5 часа до конца соревнования.
Основная задача этапа – дорешать оставшиеся задачи.
Минимальный конечный результат этапа:
- Решена хотя бы одна сложная задача из оставшихся
- Не заработано много штрафного времени при сдаче
Идеальный конечный результат этапа: Решены все задачи
Как питаться на соревновании
- Главное – не мешать своей команде (другим можно, но не сильно)
- Питаться нужно эффективно, поэтому параллельно можно решать задачу