Соревновательное программирование - это интеллектуальный спорт, обычно проводимый через Интернет или локальную сеть, с участием участников, пытающихся программировать согласно предоставленным спецификациям. Участников конкурса называют спортивными программистами. Конкурентное программирование признается и поддерживается несколькими транснациональными компаниями, занимающимися разработкой программного обеспечения и Интернетом, такими как Google и Facebook. Есть несколько организаций, которые регулярно проводят соревнования по программированию.
Соревнования по программированию, как правило, включают в себя ведущий, который представляет набор логических или математических задач, также известных как головоломки, участникам (которые может варьироваться от десятков до нескольких тысяч), и участники должны написать компьютерные программы, способные решить каждую задачу. Оценка основывается в основном на количестве решенных проблем и времени, затраченном на написание успешных решений, но может также включать другие факторы (качество полученного результата, время выполнения, размер программы и т. Д.)
Один из старейших известных конкурсов - ICPC, который возник в 1970-х годах и в 2011 году расширился до 88 стран.
С 1990 по 1994 год Оуэн Астрахан, Вивек Кера и Дэвид Котц провели один из первых распределенных интернет-конкурсов программирования, вдохновленных ICPC.
Интерес к соревнованиям программирование значительно расширилось с 2000 года и тесно связано с развитием Интернета, что облегчает проведение международных соревнований в режиме онлайн, устраняя географические проблемы.
Целью соревновательного программирования является написание исходного кода компьютерных программ, которые могут решить данные проблемы. Подавляющее большинство задач, возникающих на олимпиадах по программированию, имеют математический или логический характер. Типичные такие задачи относятся к одной из следующих категорий: комбинаторика, теория чисел, теория графов, теория алгоритмических игр, вычислительная геометрия, анализ строк и структуры данных. Задачи, связанные с искусственным интеллектом, также популярны на определенных соревнованиях.
Независимо от категории проблемы, процесс решения проблемы можно разделить на два основных этапа: построение эффективного алгоритма и реализация алгоритма на подходящем языке программирования (набор разрешенных языков программирования варьируется от конкурса к конкурсу). Это два наиболее часто проверяемых навыка на соревнованиях по программированию.
В большинстве соревнований судейство осуществляется автоматически хост-машинами, обычно известными как судьи. Каждое решение, представленное участником, оценивается судьей по набору (обычно секретных) тестовых примеров. Обычно задачи контеста имеют систему оценок «все или ничего», что означает, что решение считается «принятым» только в том случае, если оно дает удовлетворительные результаты по всем тестовым случаям, проведенным судьей, и отклоняется в противном случае. Однако некоторые задачи конкурса могут допускать частичную оценку, в зависимости от количества пройденных тестовых примеров, качества результатов или некоторых других заданных критериев. Некоторые другие конкурсы требуют только, чтобы участник представил выходные данные, соответствующие заданным входным данным, и в этом случае судье нужно только проанализировать предоставленные выходные данные.
Онлайн-судьи - это онлайн-среда, в которой происходит тестирование. У онлайн-судей есть рейтинговые списки, в которых показаны пользователи с наибольшим количеством принятых решений и / или самым коротким временем выполнения для конкретной проблемы.
Существуют два типа форматов соревнований: краткосрочные и долгосрочный. Каждый раунд краткосрочных соревнований длится от 1 до 5 часов. Длительные соревнования могут длиться от нескольких дней до нескольких месяцев.
В большинстве вышеуказанных конкурсов, поскольку количество участников достаточно большой, соревнования обычно проходят в несколько туров. Обычно они требуют онлайн-участия во всех раундах, кроме последнего, который требует участия на месте. Особым исключением из этого правила является IEEEXtreme, ежегодное 24-часовое соревнование по виртуальному программированию. Лучшие участники IOI и ACM-ICPC получают золотые, серебряные и бронзовые медали, а в других конкурсах денежные призы присуждаются лучшим финишерам. Также занятие первых мест в таблицах результатов таких конкурсов может заинтересовать рекрутеров из софтверных и интернет-компаний.
Название конкурса | Главный спонсор | Описание | Выполняется с | Обычное время | Следующий цикл приложения | Статус |
---|---|---|---|---|---|---|
Соревнование по программированию нескольких агентов | Клауст Hal University of Technology в сочетании с агентно-ориентированными семинарами | Ежегодные международные соревнования по программированию для стимулирования исследований в области разработки многоагентных систем и программирования. | 2005 | сентябрь | сентябрь 2011 | Активный |
Google Summer of Code | Google Inc. | Годовая программа, в рамках которой Google присуждает стипендии сотням студенты, успешно завершившие запрошенный проект бесплатного программного обеспечения / программирования с открытым исходным кодом в течение лета. | 2005 | март - август | 23 марта - 3 апреля | Активно |
Конкурс открытого участия Google | Google Inc. | Конкурс, проведенный Google в 2007–2008 годах для старшеклассников. Конкурс призван побудить старшеклассников участвовать в проектах с открытым кодом. | 2007 | ноябрь-февраль | Неизвестно | Неизвестно |
Сообщество программистов во всем мире создал и поддерживает несколько интернет-ресурсов, посвященных соревновательному программированию. Они предлагают отдельные конкурсы с небольшими призами или без них. Также прошлые архивы задач являются популярным ресурсом для обучения соревновательному программированию. К ним относятся:
Имя | Описание | Веб-сайт |
---|---|---|
CodeChef | Поддерживается unacademy, он ежемесячно проводит 10-дневный конкурс и пару коротких конкурсов (один в стиле IOI называется Luchtime и другие ACM ICPC в стиле Cook-Off), и предоставляет образовательным учреждениям платформу для проведения соревнований бесплатно. Два лучших победителя длительного конкурса выиграют денежные призы, а 10 лучших во всем мире получат футболку. | www.codechef.com |
CodeCup | Ежегодный международный конкурс настольных игр AI по программированию, организуемый Голландской олимпиадой по информатике с 2003 года. | codecup.nl |
Codeforces | Российский ресурс, поддерживаемый Университетом ИТМО, который в основном предоставляет частые (до двух в неделю) короткие соревнования. Особенности: возможность проверять правильность решений других участников во время «фазы взлома», виртуальных конкурсов, тренировок и т. Д. | codeforces.com |
CodinGame | Пазлы (возрастающая сложность), код гольф. Проводит регулярные онлайн-соревнования (AI вызовы, задачи оптимизации ). | www.codingame.com |
HackerEarth | Бангалор, Индия Компания со штаб-квартирой в Индии, предлагающая онлайн-конкурсы, подобные среде, с целью предоставления решений по оценке набора персонала. | www.hackerearth.com |
HackerRank | HackerRank предлагает задачи программирования в различных областях компьютерных наук. На нем также размещаются ежегодные коды, которые помогают объединить программистов и стартапы Кремниевой долины. | hackerrank.com |
Project Euler | Большой набор задач вычислительной математики (т.е. не связанных напрямую с программированием, но часто требующих навыков программирования для решения). | projecteuler.net |
Topcoder | американский ресурс и компания, которая организует конкурсы, а также предоставляет производственные проблемы как своего рода внештатную работу; Он предлагает десятки коротких конкурсов и несколько длинных («марафонов») каждый год. Особенность - участники имеют возможность проверить правильность решений других участников после фазы кодирования и перед финальным автоматическим тестированием (так называемая «фаза вызова»). | www.topcoder.com |
UVa Online Judge | Содержит более 4500 задач для практики. Проводит регулярные онлайн-соревнования. Открытый в 1995 году, он является одним из старейших подобных сайтов. | onlinejudge.org |
SPOJ | Польская система онлайн-судьи, которая создает множество проблем для обучения и предоставляет платформу для других организаторов для проведения своих соревнований по программированию. | www.spoj.com |
Open Kattis | Открытая версия системы управления контестами Kattis с архивом более 2600 задач. Kattis был разработан для обучения компьютерным наукам, но он также используется для проведения престижных соревнований, таких как ICPC World Finals. | open.kattis.com |
AtCoder | Базируется в Японии, AtCoder еженедельно предлагает онлайн-конкурсы по программированию. Конкурсы проводятся на японском и английском языках. По состоянию на 2020 год это одна из самых популярных платформ в своем роде. | atcoder.jp |
Caribbean Online Judge | Испанский ресурс, поддерживаемый University of Информатика. Содержит более 3000 задач для практики. Также проводятся регулярные онлайн-соревнования. | coj.uci.cu |
Участие в олимпиадах по программированию может повысить интерес студентов к изучению информатики. Навыки, приобретенные в соревнованиях по программированию, подобных ICPC, также улучшают карьерные перспективы, поскольку они помогают пройти «технические собеседования», которые часто требуют от кандидатов решения сложных программных и алгоритмических задач на месте.
Также было критика конкурентного программирования, особенно со стороны профессиональных разработчиков программного обеспечения. Важным моментом является то, что многие быстро развивающиеся соревнования по программированию учат конкурентов плохим навыкам программирования и стилю кода (например, ненужное использование макросов, отсутствие абстракции и комментариев ООП, использование коротких имен переменных и т. Д.). Кроме того, предлагая только небольшие алгоритмические головоломки с относительно короткими решениями, соревнования по программированию, такие как ICPC и IOI, не обязательно обучают хорошим навыкам и методам разработки программного обеспечения, поскольку реальные программные проекты обычно содержат многие тысячи строк кода и разрабатываются большими командами в течение длительных периодов времени. Питер Норвиг заявил, что, судя по имеющимся данным, победа в олимпиадах по программированию отрицательно коррелирует с эффективностью программиста на его или ее работе в Google (даже если конкурс у победителей были более высокие шансы получить работу).
Еще одно мнение заключается в том, что вместо того, чтобы «тратить» свое время на чрезмерную конкуренцию, решая проблемы с помощью известных решений, высокопоставленные программисты должны скорее вкладывать свое время в решение реальных задач. мировые проблемы.