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

На этот раз была только одна «пробка» (задача с меньшим количеством решений, чем у следующей): задача 7, заключавшаяся в загрузке ПЗУ Game Boy, извлечении содержащейся в нем строки в кодировке base64, декодировании это, меняя порядок слов на обратный, а затем выполняя его с помощью синтаксического анализатора Pikalang. Шаги были непростыми, поэтому многие люди пропустили проблему, когда у них закончились идеи.

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

В задаче 11 было наибольшее количество неправильных ответов (и почти столько же, сколько в задачах 4 и 5!). Ее можно было решить, превратив место проведения в граф и найдя минимальное вершинное покрытие. Почти все участники, испробовавшие другие методы, в итоге дали неверный ответ.

Языки

Всего в этом году для решения задач использовался 31 язык. Вы можете ясно видеть, что C++ и Python доминируют в большинстве задач, хотя соотношение C++ очень мало в задачах 2 и 8, которые обычно решались с использованием целых чисел произвольной точности (и Python изначально включает эту функциональность! ).

Что касается менее распространенных языков, bc и Picat использовались только для одного решения. PARI/GP появлялся трижды: одно решение было полностью написано на нем, а два других решения представляли собой смесь Perl и GP (оба были Perl-скриптами, которые генерировали код GP, который выдавал правильное решение).

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

Строки кода

Самый короткий код в этом году принадлежит скрипту bash длиной 103 байта, который выполняет программу AWK. Однако самым большим является решение Swift длиной 1214 строк для задачи 2, которое включает код для класса BigInt. Глядя на среднее число строк кода самых популярных языков, Python выигрывает еще одно издание, имея всего 57 строк на решение, что на одну строку лучше, чем в прошлом году!

Записи и решения

Мы собрали некоторые решения и записи участников, которые могут вас заинтересовать. Надеемся, они вам понравятся.