Решить за 60 секунд
Что такое спортивное программирование и почему стоит это попробовать?
Автор: Никита Богданов
Материал подготовлен при поддержке DataArt
Что это значит?
Решить за 60 секунд
Что такое спортивное программирование и почему стоит это попробовать?
Автор: Никита Богданов
Материал подготовлен при поддержке DataArt
Что это значит?
Этот материал подготовлен журналистами AIN.UA по редакционным стандартам и опубликован при поддержке рекламодателя
Что такое спортивное программирование?
Говоря максимально общим языком, это написание программ для решения точно определенных задач в рамках заранее установленных правил.

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

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

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

К соревнованиям допускаются студенты и аспиранты, но существует и количественное ограничение на участие: в финалах можно попробовать свои силы до двух раз, в отборочных этапах — до пяти. Это ограничивает возможность университетов собирать ультимативные команды и скорее вынуждает выстраивать династии и передавать опыт от старших курсов к младшим.
Самое главное событие в мире спортивного программирования — международная студенческая олимпиада по программированию (или принятая с английского аббревиатура ICPC). Зародившись в 1970-х как небольшое офлайн-событие, олимпиада до 1989 года объединяла участников из Канады и США. С распространением интернета это изменилось, и сейчас в соревновании ежегодно участвуют десятки тысяч человек из более чем ста стран мира.
Говоря максимально общим языком, это написание программ для решения точно определенных задач в рамках заранее установленных правил.

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

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

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

К соревнованиям допускаются студенты и аспиранты, но существует и количественное ограничение на участие: в финалах можно попробовать свои силы до двух раз, в отборочных этапах — до пяти. Это ограничивает возможность университетов собирать ультимативные команды и скорее вынуждает выстраивать династии и передавать опыт от старших курсов к младшим.
Самое главное событие в мире спортивного программирования — международная студенческая олимпиада по программированию (или принятая с английского аббревиатура ICPC).Зародившись в 1970-х как небольшое офлайн-событие, олимпиада до 1989 года объединяла участников из Канады и США. С распространением интернета это изменилось, и сейчас в соревновании ежегодно участвуют десятки тысяч человек из более чем ста стран мира.
Александр Хижа, президент Днепровского центра разработки DataArt
Александр Хижа раньше сам участвовал в подобных олимпиадах, а потом начал тренировать школьные и студенческие команды. Сейчас Александр — президент Днепровского отделения DataArt. Он отмечает силу украинских команд:

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

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

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

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

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

Ваша задача — найти порядок плиток в каждом ряду, который удовлетворяет эти ограничения, или определить, что такого порядка не существует.
Для сравнения — одна из задач прошлогоднего неформального соревнования Proggy-Buggy, одним из идеологов которого является Александр Хижа.
Баги мнит себя Гаем Юлием Цезарем и любит громогласно его цитировать при каждом удобном случае, выдавая мысли Цезаря за свои. Проги пошутил над Багги и зашифровал в стиле Цезаря список цитат, которыми пользуется Багги. Багги в панике. Если хотите, помогите ему расшифровать известную цитату:

UDMHUHCHUHBH

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

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

Ваша задача — найти порядок плиток в каждом ряду, который удовлетворяет эти ограничения, или определить, что такого порядка не существует.
Для сравнения — одна из задач прошлогоднего неформального соревнования Proggy-Buggy, одним из идеологов которого является Александр Хижа:
Баги мнит себя Гаем Юлием Цезарем и любит громогласно его цитировать при каждом удобном случае, выдавая мысли Цезаря за свои. Проги пошутил над Багги и зашифровал в стиле Цезаря список цитат, которыми пользуется Багги. Багги в панике. Если хотите, помогите ему расшифровать известную цитату:

UDMHUHCHUHBH

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

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

Ваша задача — найти порядок плиток в каждом ряду, который удовлетворяет эти ограничения, или определить, что такого порядка не существует.
Для сравнения — одна из задач прошлогоднего неформального соревнования Proggy-Buggy, одним из идеологов которого является Александр Хижа:
Баги мнит себя Гаем Юлием Цезарем и любит громогласно его цитировать при каждом удобном случае, выдавая мысли Цезаря за свои. Проги пошутил над Багги и зашифровал в стиле Цезаря список цитат, которыми пользуется Багги. Багги в панике. Если хотите, помогите ему расшифровать известную цитату:

UDMHUHCHUHBH

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

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

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

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

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

Но, пожалуй, самое главное преимущество соревнований по программированию — участвовать в них попросту весело. Проводить время с друзьями и прокачивать мозги, решая остроумные умозрительные задачки, — звучит как отличный вариант для хобби.
Попробовать свои силы в спортивном программировании можно в юмористическом соревновании Proggy-Buggy, которое в этом году пройдет уже в седьмой раз. В отличие от ивентов с более серьезными правилами, на выполнение 13 заданий (некоторые из которых нерешаемы и добавлены организаторами в виде доброй провокации) в Proggy-Buggy дается 42 минуты, чтобы участники успели получить от процесса удовольствие, но не успели устать. По традиции, победителям и призёрам предусмотрены приятные бонусы и призы.

Зарегистрироваться на Proggy-Buggy 2019 можно по ссылке до 9 сентября. Все детали будут высланы зарегистрированным командам на электронную почту.
Попробовать свои силы в спортивном программировании можно в юмористическом соревновании Proggy-Buggy, которое в этом году пройдет уже в седьмой раз. В отличие от ивентов с более серьезными правилами, на выполнение 13 заданий (некоторые из которых нерешаемы и добавлены организаторами в виде доброй провокации) в Proggy-Buggy дается 42 минуты, чтобы участники успели получить от процесса удовольствие, но не успели устать. По традиции, победителям и призёрам предусмотрены приятные бонусы и призы.
Зарегистрироваться на Proggy-Buggy 2019 можно по ссылке до 9 сентября. Все детали будут высланы зарегистрированным командам на электронную почту.
© 1999-2019 AIN.UA

При использовании материалов сайта обязательным условием является наличие гиперссылки в пределах первого абзаца на страницу расположения исходной статьи с указанием бренда издания AIN.UA. Материалы с пометками «Новости компаний» и PR публикуются на правах рекламы.
© 1999-2019 AIN.UA

При использовании материалов сайта обязательным условием является наличие гиперссылки в пределах первого абзаца на страницу расположения исходной статьи с указанием бренда издания AIN.UA. Материалы с пометками «Новости компаний» и PR публикуются на правах рекламы.