Змагання з програмування це гра навички, яка зазвичай проводиться за допомогою мережі Інтернет або через локальну мережу, під час якого учасники намагаються програмувати згідно з наведеними специфікаціями. Учасників змагань називають спортивними програмістами. Змагання з програмування мають визнання та підтримку багатьма ІТ компаніями, як наприклад Google,[1][2] та Facebook.[3] Існує декілька організацій, які проводять змагання з програмування на регулярній основі.
Змагання з програмування зазвичай вимагають від організаторів надання списку логічних або математичних завдань для учасників змагань (кількість яких може бути від кількох десятків до кількох тисяч), а учасники мають написати комп'ютерні програми, здатні вирішувати кожне з завдань. Переможців визначають здебільшого за кількістю правильно вирішених завдань за найменший час, але також можуть бути враховані інші фактори (якість вихідних даних, час виконання, розмір програми тощо).
Історія
Одне з найдавніших змагань це ICPC, яке з'явилося в 70-х роках і станом на 2011 рік включає в себе 88 країн. Цікавість до спортивного програмування значно виросла за останні роки і багато в чому поєднана зі зростанням Інтернету, так як це заохочує проводити міжнародні онлайн-змагання без урахування географічних проблем.
Огляд
Мета змагань з програмування це написання початкового коду комп'ютерних програм, які здатні вирішувати запропоновані завдання. Переважна більшість проблем, що містяться у змаганнях з програмування, є математичними або логічними. Зазвичай ці завдання належать до наступних категорій: комбінаторика, теорія чисел, теорія графів, геометрія, аналіз рядків та структури даних. Проблеми пов'язані зі штучним інтелектом також популярні на деяких змаганнях.
Незалежно від категорії завдання, процес вирішування завдання може бути поділений на два основних етапи: розробка алгоритму та кодування алгоритму обраною мовою програмування (список дозволених мов програмування залежить від конкретного змагання).
На більшості змагань визначення результатів проводиться автоматично за допомогою спеціальних систем. Кожен розв'язок завдання запускається на сервері. На вхід цьому розв'язку подається список тестових прикладів (зазвичай секретний). У більшості випадків вирішення проблем маркуються за принципом «все або нічого», тобто якщо вирішення спрацювало неправильно на хоча б одному з тестових прикладів, воно не зараховується. Однак, деякі змагання використовують процентну систему оцінювання, тобто за розв'язок дають стільки відсотків, скільки відсотків тестових прикладів було розв'язано правильно.
Типи змагань
Існують два основніх типи змагань: короткострокові та довгострокові. Кожний раунд короткострокових змагань триває від 1 до 5 годин. Довгострокові змагання тривають від кількох діб до кількох місяців.
Короткострокові
ICPC - одне з найстаріших змагань для студентів ВНЗ у складі команд з трьох осіб
ACSL - змагання з інформатики для школярів. Містить письмову частину та кодування
Google Code Jam - змагання, яке проводиться з 2003 року. Засновано та спонсується компанією Google
TopCoder Open - Algorithm - змагання, яке проводиться з 2004 року за підтримки TopCoder
Яндекс Алгоритм - змагання, яке проводиться з 2013 року за підтримки компанії Яндекс;
У більшості вищезгаданих змагань, оскільки кількість учасників досить велика, змагання, як правило, організовуються в декілька раундів. Вони зазвичай дозволяють приймати учать онлайн у всіх раундах, крім останнього, який вимагає участі очно. Особливим винятком є IEEEXtreme, що є щорічним 24-годинним змаганням з програмування. Найкращі учасники IOI та ICPC отримують золоті, срібні та бронзові медалі, а в інших конкурсах фіналісти нагороджуються грошовими призами. Крім того, потрапляння в топ в таблицях результатів таких змагань може зацікавити рекрутерів від програмних та інтернет-компаній.
Halite[8] — Змагання з програмування штучного інтелекту. Halite I проводився з листопада 2016 по лютий 2017, Halite II проводиметься з 23 жовтня 2017 по 22 лютого 2018. Обидва змагання спонсовані Two Sigma and Cornell Tech[9] Гугл також спонсує Halite II[10]
CodeCup.nl — щорічне змагання штучного інтелекту в настільних іграх. Правила нової гри з'являються у вересні, остаточний турнір проводиться у січні.
Онлайн змагання та ресурси для підготовки
Програмісти з усього світу створили і підтримують декілька інтернет-ресурсів присвячених змаганням з програмування. Вони пропонують автономні змагання з винагородами або без них. Архіви минулих змагань є, в свою чергу, популярним ресурсом для тренувань у вирішенні подібних завдань. Серед яких:
Назва
Опис
Вебсайт
AtCoder
Платформа для проведення змагань, створена командою японських програмістів-змагунів.
Підтримується Directi, проводить 10-денне змагання та пару короткострокових змагань щомісяця (одне в стилі IOI і одне в стилі ICPC), та предоставляє безкоштовну платформу для проведення змагань для освітніх інституцій. Два найкращих учасники довгострокового змагання отримують грошову винагороду, десять найкращих учасників отримують футболки.
Російський ресурс, підтримується Саратовським університетом, надає доступ до регулярних (до двох на тиждень) коротких змагань. Спеціальні можливості: можливість перевірити коректність рішень інших учасників під час «хакерської фази», віртуальні змагання, тренування і т. ін.
Містить задачі з програмування, які можна вирішувати в онлайновому редакторі на одній з дев'яти мов програмування. Також надає доступ до ресурсів з поясненням роботи алгоритмів, вводним курсом з JavaScript, відеоматеріалами та матеріалами з підготовки до інтерв'ю.
Вебсайт, присвячений програмуванню зі статтями та практичними завданнями. Сайт націлений на підготовку до проходження технічних інтрев'ю. Був започаткований у 2009 році, а платформа для змагань з програмування була додана у 2015 році.
Започаткований 2012 року, пропонує завдання з програмування у різних областях інформатики. Також проводить річний захід Codesprints, який допомагає з'єднати програмістів і стартапи Кремнієвої долини.
Відкрита версія системи оцінювання змагань Kattis, що містить архів із понад 2600 завдань.[12] Система заснована у 2005 році у Швеції. Головною метою системи було її використання у курсах програмування і комп'ютерних наук, але Kattis також використовують для проведення престижних змагань, таких як світовий фінал ICPC.[13]
Велика колекція обчислювальних математичних завдань (тобто маючих не пряме відношення до програмування, але потребуючих навичок кодування для їх вирішення).
Польська платформа для онлайн-суддівства, яка надає доступ до багатьох навчальних задач, і надає платформу для інших організаторів для проведення своїх змагань з програмування.
Ресурс та компанія, що базується у США, організує змагання та дає доступ до задач індустрії як до різновиду фрилансу; пропонує кілька коротких і кілька довгих («марафони») змагань щороку. Спеціальні можливості: учасники мають змогу перевірити правильність рішень інших учасників після фази кодування та перед фінальним автоматичним тестуванням (так званою «фазою завдання»).
Містить архів із понад 4500 завдань для тренувань.[12] Проводить регулярні онлайн-змагання. Заснований 1995 року, це один з найдавніших подібних сайтів.
↑ абBloomfield, Aaron; Sotomayor, Borja. A Programming Contest Strategy Guide(PDF). SIGCSE '16: Proceedings of the 47th ACM Technical Symposium on Computing Science Education. Архів оригіналу(PDF) за 20 березня 2020. Процитовано 24 березня 2020.