Решить за 60 секунд: что такое спортивное программирование и почему стоит это попробовать

0
234
views
Спортивное программирование

Что такое спортивное программирование? Говоря максимально общим языком, это написание программ для решения точно определенных задач в рамках заранее установленных правил, — пишет AIN.UA.

Программа в этом случае — 200-300 строк кода. Командная строка, никакого графического интерфейса и любых излишеств.

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

Установленные правила — это, в основном, ограниченное время и лимит памяти, иногда — конкретные языки программирования. Правила отличаются в зависимости от площадки, которая проводит соревнование.

К соревнованиям допускаются студенты и аспиранты, но существует и количественное ограничение на участие: в финалах можно попробовать свои силы до двух раз, в отборочных этапах — до пяти. Это ограничивает возможность университетов собирать ультимативные команды и скорее вынуждает выстраивать династии и передавать опыт от старших курсов к младшим.

Александр Хижа раньше сам участвовал в подобных олимпиадах, а потом начал тренировать школьные и студенческие команды. Сейчас Александр — президент Днепровского отделения DataArt. Он отмечает силу украинских команд:

«Украинские студенты — участники ежегодных финалов Первенства мира по программированию среди университетов (ICPC). В 2008 году украинская команда завоевала первую национальную золотую медаль в финале. В 2010 — вторую. В 2016 — бронзу.

Сам я начал участвовать в организации студенческих олимпиад по программированию еще будучи аспирантом Киевского института математики АН УССР в конце 1980-х. Студенческих олимпиад по программированию в Украине в современном смысле (в смысле ICPC) тогда еще не было. Они родились в начале 2000-х, и их участниками стали вчерашние школьники и их тренеры».

Команды в таких соревнованиях состоят из трёх человек, которые имеют в своем распоряжении только один компьютер. Задания — обычно в количестве от восьми до тринадцати — команды получают в конвертах только перед стартом, на их решения им даётся пять часов. Решением задачи является программа, которая считывает текстовой запрос и выдает текстовый ответ. Программы проверяют на правильность прямо во время соревнования автоматически, с помощью решений, которые заранее подготовили жюри.

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

Что такое спортивное программирование

Задачи

Задачи бывают нескольких видов: преобладают математические и алгоритмические. Так как почти любую задачу можно решить, написав программу, которая просто переберёт все варианты, организаторы придумывают разнообразные ограничения, вроде штрафов и лимитов, чтобы мотивировать команды подходить к решению более продуманно. Ниже пример задачи из финала этого года, а задачи за всю историю и их решения можно посмотреть по ссылке.

Пример задачи №1

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

Ваша задача — найти порядок плиток в каждом ряду, который удовлетворяет эти ограничения, или определить, что такого порядка не существует.

Пример задачи №2

Баги мнит себя Гаем Юлием Цезарем и любит громогласно его цитировать при каждом удобном случае, выдавая мысли Цезаря за свои. Проги пошутил над Багги и зашифровал в стиле Цезаря список цитат, которыми пользуется Багги. Багги в панике. Если хотите, помогите ему расшифровать известную цитату:

UDMHUHCHUHBH

Напишите программу, которая для вышеприведенного шифртекста выводит соответствующий открытый текст.

Первенства

Помимо студенческой олимпиады, есть и одиночные онлайн-первенства. Так, например, самая известная платформа Codeforces не только проводит регулярные турниры, но и подсчитывает индивидуальный рейтинг спортсменов по шахматной системе Эло — и его лидеры становятся авторитетом не только в рамках этих соревнований, но и за пределами мира спортивного программирования.

Спортивное программирование

Свои крупные турниры проводят и техногиганты. Самые известные из них: Google Code Jam и Facebook Hacker Cup. Такие события помогают компаниям завязывать контакты с перспективными специалистами, а сами программисты не только соревнуются за ценные призы, но и становятся частью активного сообщества. С каких-то пор задачи, подобные тем, что решают участники на турнирах, стали частью устройства на работу — так, например, Google India предоставляет кандидатам возможность продемонстрировать свои умения в решениях алгоритмических задач как один из промежуточных этапов перед интервью.

Зачем заниматься спортивным программированием?

Регулярная практика решения неожиданных и новых задач косвенно готовит и к техническому интервью, повышая скорость решения задач и обеспечивая конкурентное преимущество перед другими кандидатами.

«Спортивное программирование тренирует навыки разработки алгоритмов и структур данных в сжатые сроки, навыки работы в команде, стрессоустойчивость. Люди, прошедшие подобный тренинг — желанные работники в ведущих мировых IT-компаниях: Google, Facebook, Microsoft. Следует при этом откровенно признать, что потребность в таких людях у «обычных» IT-компаний достаточно невысока. Но хотя бы несколько таких людей нужны в любой компании», — говорит Александр Хижа.

Участие в соревнования по программированию помогает натренировать способность фокусироваться на задаче в течение промежутка времени. Развивается практика анализировать все составляющие кода, а регулярные ошибки в решениях не только учат внимательности, но и помогают преодолевать страх неудачи.

Спортивное программирование — отличный тренажер командного взаимодействия. Приступая к решению групповых задач, участники довольно быстро определяют свои сильные стороны и зоны ответственности: кто-то силён в коде, кто-то в нахождении решений, кому-то легче дается геометрия, кому-то строки. В конечном итоге это отличная возможность убедиться в прелестях синергии и того, как сумма целого может быть больше суммы его частей.

Но, пожалуй, самое главное преимущество соревнований по программированию — участвовать в них попросту весело. Проводить время с друзьями и прокачивать мозги, решая остроумные умозрительные задачки, — звучит как отличный вариант для хобби.

ОСТАВЬТЕ ОТВЕТ

Please enter your comment!
Please enter your name here