Змагання з програмування

Матеріал з Вікіпедії — вільної енциклопедії.
(Перенаправлено з Спортивне програмування)
Перейти до навігації Перейти до пошуку
Олег Навер – багаторазовий переможець міжнародної олімпіади з інформатики.

Змагання з програмування це гра навички, яка зазвичай проводиться за допомогою мережі Інтернет або через локальну мережу, під час якого учасники намагаються програмувати згідно з наведеними специфікаціями. Учасників змагань називають спортивними програмістами. Змагання з програмування мають визнання та підтримку багатьма ІТ компаніями, як наприклад Google,[1][2] та Facebook.[3] Існує декілька організацій, які проводять змагання з програмування на регулярній основі.

Змагання з програмування зазвичай вимагають від організаторів надання списку логічних або математичних завдань для учасників змагань (кількість яких може бути від кількох десятків до кількох тисяч), а учасники мають написати комп'ютерні програми, здатні вирішувати кожне з завдань. Переможців визначають здебільшого за кількістю правильно вирішених завдань за найменший час, але також можуть бути враховані інші фактори (якість вихідних даних, час виконання, розмір програми тощо).

Історія[ред. | ред. код]

Одне з найдавніших змагань це ICPC, яке з'явилося в 70-х роках і станом на 2011 рік включає в себе 88 країн. Цікавість до спортивного програмування значно виросла за останні роки і багато в чому поєднана зі зростанням Інтернету, так як це заохочує проводити міжнародні онлайн-змагання без урахування географічних проблем.

Огляд[ред. | ред. код]

Мета змагань з програмування це написання початкового коду комп'ютерних програм, які здатні вирішувати запропоновані завдання. Переважна більшість проблем, що містяться у змаганнях з програмування, є математичними або логічними. Зазвичай ці завдання належать до наступних категорій: комбінаторика, теорія чисел, теорія графів, геометрія, аналіз рядків та структури даних. Проблеми пов'язані зі штучним інтелектом також популярні на деяких змаганнях.

Незалежно від категорії завдання, процес вирішування завдання може бути поділений на два основних етапи: розробка алгоритму та кодування алгоритму обраною мовою програмування (список дозволених мов програмування залежить від конкретного змагання).

На більшості змагань визначення результатів проводиться автоматично за допомогою спеціальних систем. Кожен розв'язок завдання запускається на сервері. На вхід цьому розв'язку подається список тестових прикладів (зазвичай секретний). У більшості випадків вирішення проблем маркуються за принципом «все або нічого», тобто якщо вирішення спрацювало неправильно на хоча б одному з тестових прикладів, воно не зараховується. Однак, деякі змагання використовують процентну систему оцінювання, тобто за розв'язок дають стільки відсотків, скільки відсотків тестових прикладів було розв'язано правильно.

Типи змагань[ред. | ред. код]

Існують два основніх типи змагань: короткострокові та довгострокові. Кожний раунд короткострокових змагань триває від 1 до 5 годин. Довгострокові змагання тривають від кількох діб до кількох місяців.

Короткострокові[ред. | ред. код]

  • ICPC - одне з найстаріших змагань для студентів ВНЗ у складі команд з трьох осіб
  • ACSL - змагання з інформатики для школярів. Містить письмову частину та кодування
  • Google Code Jam - змагання, яке проводиться з 2003 року. Засновано та спонсується компанією Google
  • Facebook Hacker Cup - змагання, яке проводиться з 2011 року. Засновано і спонсується компанією Facebook
  • HackerRank Ad Infinitum[4] - математичне змагання з програмування HackerRank
  • CodeChef Cook-Off[5] - змагання за принципами ICPC, яке проводиться останньої суботи кожного місяця
  • CodeChef LunchTime[5] - змагання для школярів, яке проводиться останнь\ суботи кожного місяця
  • CodeChef SnackDown[6] - річне змагання з кількох раундів, яке проводиться за підтримки CodeChef
  • IEEEXtreme Programming Competition - річне змагання для студентів IEEE, проводиться з 2006 за підтримки IEEE
  • IOI - одне з найстаріших змагань для школярів
  • TopCoder Open - Algorithm - змагання, яке проводиться з 2004 року за підтримки TopCoder
  • Яндекс Алгоритм - змагання, яке проводиться з 2013 року за підтримки компанії Яндекс;

У більшості вищезгаданих змагань, оскільки кількість учасників досить велика, змагання, як правило, організовуються в декілька раундів. Вони зазвичай дозволяють приймати учать онлайн у всіх раундах, крім останнього, який вимагає участі очно. Особливим винятком є IEEEXtreme, що є щорічним 24-годинним змаганням з програмування. Найкращі учасники IOI та ICPC отримують золоті, срібні та бронзові медалі, а в інших конкурсах фіналісти нагороджуються грошовими призами. Крім того, потрапляння в топ в таблицях результатів таких змагань може зацікавити рекрутерів від програмних та інтернет-компаній.

Довгострокові[ред. | ред. код]

  • CodeChef Long Challenges[5]
  • Google AI Challenge — змагання для студентів, що проходило у 2009–2011 роках
  • HackerRank Week of Code[7] - тижневе змагання, організоване HackerRank
  • Halite[8] — Змагання з програмування штучного інтелекту. Halite I проводився з листопада 2016 по лютий 2017, Halite II проводиметься з 23 жовтня 2017 по 22 лютого 2018. Обидва змагання спонсовані Two Sigma and Cornell Tech[9] Гугл також спонсує Halite II[10]
  • ICFP Programming Contest — щорічне 3-денне змагання, проводиться з 1998 року при підтримці International Conference on Functional Programming
  • Kaggle
  • Russian AI Cup — відкрите змагання з програмування штучного інтелекту
  • TopCoder Marathon matches
  • CodeCup.nl — щорічне змагання штучного інтелекту в настільних іграх. Правила нової гри з'являються у вересні, остаточний турнір проводиться у січні.

Онлайн змагання та ресурси для підготовки[ред. | ред. код]

Програмісти з усього світу створили і підтримують декілька інтернет-ресурсів присвячених змаганням з програмування. Вони пропонують автономні змагання з винагородами або без них. Архіви минулих змагань є, в свою чергу, популярним ресурсом для тренувань у вирішенні подібних завдань. Серед яких:

Назва Опис Вебсайт
AtCoder Платформа для проведення змагань, створена командою японських програмістів-змагунів. atcoder.jp
CodeChef Підтримується Directi, проводить 10-денне змагання та пару короткострокових змагань щомісяця (одне в стилі IOI і одне в стилі ICPC), та предоставляє безкоштовну платформу для проведення змагань для освітніх інституцій. Два найкращих учасники довгострокового змагання отримують грошову винагороду, десять найкращих учасників отримують футболки. www.codechef.com
CodeCup Щорічне міжнароджне змагання в галузі штучного інтелекту настільних ігор. Проводиться Олімпіадою з інформатики Нідерландів з 2003 року.[11] CodeCup.nl
Codeforces Російський ресурс, підтримується Саратовським університетом, надає доступ до регулярних (до двох на тиждень) коротких змагань. Спеціальні можливості: можливість перевірити коректність рішень інших учасників під час «хакерської фази», віртуальні змагання, тренування і т. ін. codeforces.com
Coderbyte Містить задачі з програмування, які можна вирішувати в онлайновому редакторі на одній з дев'яти мов програмування. Також надає доступ до ресурсів з поясненням роботи алгоритмів, вводним курсом з JavaScript, відеоматеріалами та матеріалами з підготовки до інтерв'ю. www.coderbyte.com
CodinGame Головоломки (зі зростаючою складністю), код-гольф. Проводить регулярні онлайн-змагання (змагання штучного інтелекту, задачі оптимізації) www.codingame.com
GeeksforGeeks Вебсайт, присвячений програмуванню зі статтями та практичними завданнями. Сайт націлений на підготовку до проходження технічних інтрев'ю. Був започаткований у 2009 році, а платформа для змагань з програмування була додана у 2015 році. geeksforgeeks.org
HackerEarth Компанія, що базується у місті Бенгалуру, Індія, та проводить онлайн-змагання націлені на оцінку для набору персоналу. www.hackerearth.com
HackerRank Започаткований 2012 року, пропонує завдання з програмування у різних областях інформатики. Також проводить річний захід Codesprints, який допомагає з'єднати програмістів і стартапи Кремнієвої долини. hackerrank.com
Open Kattis Відкрита версія системи оцінювання змагань Kattis, що містить архів із понад 2600 завдань.[12] Система заснована у 2005 році у Швеції. Головною метою системи було її використання у курсах програмування і комп'ютерних наук, але Kattis також використовують для проведення престижних змагань, таких як світовий фінал ICPC.[13] open.kattis.com
POJ Система для онлайн-суддівства Пекінського університету для змагань ICPC, створена Ying Fuchen, Xu Pengcheng та Xie Di. Містить понад 3000 завдань. poj.org
Project Euler Велика колекція обчислювальних математичних завдань (тобто маючих не пряме відношення до програмування, але потребуючих навичок кодування для їх вирішення). projecteuler.net
SPOJ Польська платформа для онлайн-суддівства, яка надає доступ до багатьох навчальних задач, і надає платформу для інших організаторів для проведення своїх змагань з програмування. www.spoj.com
TopCoder Ресурс та компанія, що базується у США, організує змагання та дає доступ до задач індустрії як до різновиду фрилансу; пропонує кілька коротких і кілька довгих («марафони») змагань щороку. Спеціальні можливості: учасники мають змогу перевірити правильність рішень інших учасників після фази кодування та перед фінальним автоматичним тестуванням (так званою «фазою завдання»). www.topcoder.com
UVa Online Judge Містить архів із понад 4500 завдань для тренувань.[12] Проводить регулярні онлайн-змагання. Заснований 1995 року, це один з найдавніших подібних сайтів. uva.onlinejudge.org

Див. також[ред. | ред. код]

  • DEV Challenge — всеукраїнський чемпіонат з розробки програмного забезпечення серед junior, middle та senior програмістів

Посилання[ред. | ред. код]

  1. Google Code Jam. google.com. Архів оригіналу за 19 лютого 2016. Процитовано 20 лютого 2016.
  2. TCO12 Sponsor: Google - TCO 12. topcoder.com. Архів оригіналу за 16 лютого 2012.
  3. Facebook Hacker Cup. Facebook. Архів оригіналу за 5 липня 2013. Процитовано 20 лютого 2016.
  4. Programming problems and Competitions :: HackerRank. HackerRank. Процитовано 20 лютого 2016.
  5. а б в COMPETE - CodeChef. codechef.com. Архів оригіналу за 11 лютого 2016. Процитовано 20 лютого 2016.
  6. Snackdown Home - CodeChef. codechef.com. Архів оригіналу за 12 квітня 2016. Процитовано 15 жовтня 2019.
  7. Programming problems and Competitions :: HackerRank. HackerRank. Архів оригіналу за 16 листопада 2017. Процитовано 20 лютого 2016.
  8. Halite Artificial Intelligence Programming Challenge. www.halite.io. Архів оригіналу за 16 травня 2022. Процитовано 19 червня 2022.
  9. Two Sigma Announces Public Launch of Halite. tech.cornell.edu. Архів оригіналу за 30 жовтня 2017. Процитовано 1 січня 2018.
  10. Halite helps students and developers compete to build better AI on Google Cloud Platform. Архів оригіналу за 31 січня 2023. Процитовано 1 січня 2018.
  11. Wevers, Lesley (2014). Monte-Carlo Tree Search for Poly-Y (PDF). University of Twente. Архів оригіналу (PDF) за 13 квітня 2017. Процитовано 16 вересня 2018.
  12. а б 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.
  13. Enström, E.; Kreitz, G.; Niemelä, F.; Söderman, P.; Kann, V. (2011). Five years with Kattis – using an automated assessment system in teaching (PDF). IEEE Frontiers in Education Conference. Архів оригіналу (PDF) за 20 серпня 2020. Процитовано 24 березня 2020.

Зовнішні джерела[ред. | ред. код]

Проект з відкритим кодом для проведення змагань