Соревнования проводятся с 2003 года как средство для выявления лучших умов для возможной работы в Google. Google Code Jam считается одним из самых массовых чемпионатов по программированию. В последние годы чемпионат собирает свыше 50 тысяч участников, половина из которых проходит в квалификационный раунд. В этом году, как отмечают организаторы, число зарегистрировавшихся на соревнования программистов превысило 60 тысяч человек.

В Google Code Jam может принять участие любой желающий. После подачи заявки дается возможность участия в квалификационном раунде, который длится около суток и для прохождения которого необходимо набрать некоторое число баллов. В дальнейшем проводится серия из трех раундов, каждый из которых проходит в разные дни и имеет длительность 2,5 часа каждый.

После завершения второго раунда в следующем этапе участвует 500 человек, по завершению которого остается 25 лучших, отправляющихся на финал. Все соревнования, кроме финала, проходят онлайн. Финал каждый раз проходит в разных странах. Например, соревнования 2017 года принимала Ирландия (Дублин), а в этом году финал состоялся в Канаде (Торонто). Приз за первое место составляет 15 тыс.долларов.

Источник: twitter.com/googlecodejam
Источник: twitter.com/googlecodejam

Правила

Чемпионат состоит из набора алгоритмических задач, которые должны быть решены за фиксированное время. В этом году система для проведения соревнования была обновлена, и теперь код участников запускается на тестирующих компьютерах компании. Таким образом теперь нужно использовать один из языков: Bash, C, C++, C# (mono), Go, Haskell (ghc), Java 8, Javascript (nodejs), Python 2, Python 3, PHP, and Ruby).

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

В этом году финалисты должны были решить пять задач. По мнению жюри соревнования, задачи делились на два уровня сложности: более простые и поэтому более дешевые в баллах задачи Jurisdiction Restrictions и Two-Tiling и более сложные Go, Gophers!, Swordmaster и The Cartesian Job, следует из официальной аналитики соревнований. В итоговой таблице результатов гораздо больше частичных решений задачи Go Gophers, чем Two-Tiling. Хотя задача про сусликов и привлекла большее количество финалистов, она же и определила во многом итоговые места: из 20 принятых системой решений только у семи участников они оказались полностью правильными и обеспечили место в десятке лучших. Тройка лидеров определилась на последних минутах.

Источник: twitter.com/googlecodejam
Источник: twitter.com/googlecodejam

Результаты

Победу в пятый раз подряд одержал студент Университета ИТМО Геннадий Короткевич, двукратный победитель международного чемпионата мира по программированию ACM ICPC (2013 и 2015 годов), пятикратный победитель Яндекс.Алгоритма, а также победитель и призер других международных контестов. Такое достижение пока не удалось повторить ни одному участнику соревнований.

По итогам соревнований он набрал 104 балла, опередив ближайших соперников Камила Дебовски (Errichto.rekt) из Польши, поднявшегося на второе место по результатам финальных подсчетов с результатом 96 баллов, и Макото Соэджима (rng..58) из Японии, набравшего по итогам соревнований 86 баллов. В пятерку вошел также Михаил Ипатов (LhiC), чемпион ACM ICPC-2018 из МГУ им.Ломоносова, расположившийся на четвертом месте с 86 баллами, но затративший больше времени на решение задач. Ознакомиться с результатами финала подробнее можно в итоговой таблице соревнований.

Финалисты Google Code Jam-2018. Источник: twitter.com/googlecodejam
Финалисты Google Code Jam-2018. Источник: twitter.com/googlecodejam

По словам Геннадия Короткевича, главной особенностью Google Code Jam этого года стало изменение правил, державшихся постоянными на протяжении десяти лет. Ранее участники сами запускали свои решения, а теперь тестирование проводилось на компьютерах жюри. Была переписана и полностью обновлена система, на которой проводились соревнования. Кроме того, ранее участники могли выбирать операционную систему, установленную на их компьютерах — Windows или Linux, а на этот раз единственным вариантом оставили Linux.

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

Сейчас Геннадий Короткевич поступает в аспирантуру Университета ИТМО. Кстати, один из экзаменов победитель Google Code Jam сдал дистанционно прямо из Канады.