Две недели назад завершилась уже вторая олимпиада от паблика "Типичный программист". Две недели назад мы приняли решение написать этот пост, но решили подождать (чего — читайте ниже).
И вот сейчас, когда температура стульев вновь повысилась, мы с чистой совестью приступили к выполнению обещания.
Для желающих есть ссылки на условия задач и разбор.
Разумеется, от этой олимпиады мы вряд ли ждали многого, как и от многих других олимпиад по программированию, в сообществе которых не видно знакомых лиц и не слышно знакомых слов. Опасаться стоило прежде всего некачественных задач и нетрадиционных способов проверки решений. Однако те, кому повезло участвовать в прошлом году, хоть были не очень довольны организацией контеста в целом, но об условиях задач отзывались более-менее положительно. В качестве тестирующей системы использовался ejudge.
Почему же всё-таки в этом хотелось поучаствовать? Наверное, во многом из-за желания посмотреть, как может выглядеть большая олимпиада, организованная без помощи специализированной платформы (будь то Codeforces, Яндекс.Контест или другие) и обслуживающих эту платформу людей. Кроме того, обещали призы и подарки. Наконец, учитывая предполагаемую аудиторию мероприятия, не хотелось терять шанс показать "обычным программистам" (которых в последние годы часто рассматривают почти как антагонистов "спортивных программистов"), каково это — находиться на нашем "поле боя".
Сразу следует сказать, что у олимпиады были сильные стороны — прежде всего это набор задач про Brainfuck, в одной из которых требовалось написать интерпретатор этого языка, а в нескольких других — простые программы на нём. Решение первой задачи можно было дебужить решениями других задач, и это было очень интересно и здорово. Было видно, что жюри по мере своих сил старается решать возникающие технические проблемы, информировать о состоянии дел через паблик.
Но, всё-таки, чем же нам действительно запомнится это соревнование?
1) Да, разумеется, ПРОСТОЯМИ. В течение первого дня олимпиады ожидание вердикта по решениям могло занимать более часа, размер очереди проверяемых посылок мог достигать шести сотен.
> лол, в прошлом году очередь была около 1400 в свои лучшие времена, интересно, в этом так получится?)
- Андрей из скайпа
К ночи серверы таки ускорили, но неповторимый осадок остался. Резонный вопрос — можно ли было организовать какое-то подобие пробного тура и заранее узнать, что серверы не потянут? Тем более, что опыт прошлого года также подводил к этому решению.
2) Сразу после простоев идёт специфичная система ранжирования: при одинаковом количестве баллов и попыток выше находится тот участник, который имеет меньшее время между первым и последним решением. Казалось бы, в свете первого пункта такая система вообще не жизнеспособна. Осторожный участник, не уверенный до конца в своём решении, в течение первого дня был вынужден ждать вердикта, накапливая таким образом временной штраф. В таких условиях, наверное, больше подошла бы система оценки времени наподобие ICPC. Окей, всё же можно допустить, что авторы не предполагали такой беды с серверами, а исправлять метрику ранжирования на ходу не было возможности. Но…
3) В итоге контест выигрывает человек с разницей в 3 секунды между посылками. Разумеется, вполне можно было решить всё заранее и потом отослать решения по всем задачам вместе; вряд ли кто-то сможет обвинить топовых участников в том, что они использовали какую-то другую стратегию. Но, тем не менее, нельзя отрицать, что первые два пункта в совокупности породили отличное поле для недобросовестного поведения участников. В погоне за призами, особенно ближе к концу соревнования, количество новых участников, внезапно сдающих всё за минуты с первой попытки (при наличии в проблемсете минимум двух сложных задач с “подводными камнями”, где можно было получить неполный балл), росло темпами, несовместимыми со здравым смыслом. В итоговой таблице было более сотни полных решений, десятки — одним-двумя брёвнами по всем 14 задачам.
4) Наконец, пункт, из-за которого этот пост появился на свет только сейчас, так как надежда ещё теплилась. Обещания проверки решений на плагиат. Очевидно, что в сложившейся ситуации она была очень и очень важна. Ближе к концу соревнования организаторы стали запугивать недобросовестных участников страшными карами и предлагать сдаться с повинной, дабы сохранить часть баллов (что, вообще говоря, само по себе странно, так как за неспортивное поведение в приличных домах банят). В турнирной таблице даже появились пометки читерских попыток, правда, все они красовались на одном-единственном участнике до самого конца контеста. В итоге, к сожалению, ощутимых изменений от пристальной проверки решений, занявшей две дополнительных недели (ДВЕ НЕДЕЛИ, КАРЛ), так и не оказалось (по словам организаторов, дисквалифицирован был один участник). Топ турнирной таблицы сохранил своё неповторимое великолепие.
Et cetera. Надо бы упомянуть несколько мелких, но запомнившихся особенностей, как то:
нерасторопность жюри в ответах на клары (наверное, из-за того, что клар было много),
недочёты в интерпретаторе брейнфака, вылившиеся в ночной реджадж (получается, весь день минимум 3 задачи могли получать неполное количество баллов, что в дальнейшем повлекло ещё большую путаницу в результатах),
общее качество задач, которое на удивление соответствовало ожидаемому:
Тимур, а вот интересно, кто-нибудь перед отправкой хоть немного тестил, или все просто понимали "ага, ну очевидно, что в этой задаче невероятно слабые тесты, поэтому отправлю-ка я треш"? :)
- https://vk.com/tproger_olymp?w=wall-67845382_4562
Nuff said.
Что же остаётся в итоге? При всех недостатках, мы не можем забывать про важность таких олимпиад для популяризации олимпиадного программирования. И организаторы, и спонсоры проделали большую работу. Но было бы ещё лучше, если бы недостатки со временем исправлялись, метрики улучшались, задачи дорабатывались напильником. В текущей же ситуации получилось так, что из-за упомянутых багов у многих участников сложилось скорее негативное представление об олимпиадном программировании, а это наверняка совсем не то, к чему стремились организаторы.
Видимо, сам этот пост — наше средство создать обсуждение олимпиады, оставить напоминание её создателям, что их работу видят в большом олимпиадном сообществе.
Участвовали ли в этой олимпиаде вы? Чем она вам запомнилась? Что вы можете про неё рассказать?
Всегда ваши, синие да зелёные из Ульяновска. Писали все вместе, правда.