ICFP Programming Contest

Эта статья находится на начальном уровне проработки, в одной из её версий выборочно используется текст из источника, распространяемого под свободной лицензией
Материал из энциклопедии Руниверсалис

ICFP Programming Contest — международное соревнование по программированию, проводимое ежегодно в июне-июле с 1998 года. Результаты соревнования объявляются на Международной конференции по функциональному программированию.

Команды могут быть любого размера и использовать любой язык программирования (либо несколько языков). Денежные взносы за участие отсутствуют. Участники получают 72 часа на выполнение заданий и отправку своих решений через Интернет. Иногда проводится 24-часовой блиц-турнир.

Победители имеют особое право заявлять о том, что предпочитаемый ими язык является «выбором для разборчивых хакеров». Таким образом, одной из целей соревнования является возможность показать возможности языка программирования и инструментов, используемых участником соревнования. Ранее обладатели главного приза использовали для решения задач такие языки как Haskell, OCaml, C++, Cilk и Java.

Задачи

Год Организатор Задача
1998 Массачусетский технологический институт Написать программу, моделирующую росток, своеобразный вариант игры «Крестики-нолики». Представленные программы были распределены на первые и вторые места.
1999 Гарвардский университет Оптимизация выражений case (в описании задачи говорилось о текстовом квесте, но фактически задача сводилась к оптимизации описания подобной игры).
2000 Корнеллский университет Реализовать путь луча при помощи Postscript-подобного синтаксиса.
2001 INRIA Rocquencourt Оптимизация HTML-подобного языка разметки за счет отказа от излишних пробелов, тегов и т. д.
2002 OGI School of Science and Engineering Реализовать роботов, способных играть друг против друга в игру наподобие Sokoban.
2003 Технический университет Чалмерса Реализовать роботов, способных управлять машиной на максимально возможной скорости на трассах различной сложности.
2004 Пенсильванский университет Колония муравьев. Создать колонию, которая сможет быстрее доставлять еду к муравейнику и будет избегать муравьев других видов. Решением являлась машина состояний. Позже задача была адаптирована в стратегической программистской игре Ant Wars с языком описания конечных автоматов Antomata[1].
2005 PLT group Реализовать ботов для игры «Cops & Robbers». Решением являлись две управляющие программы, одна для бота-грабителя, задачей которого было грабить все банки в окрестностях, не попадаясь полиции, другая — для бота-полицейского, который ловит грабителей.
2006 Carnegie Mellon University Реализовать виртуальную машину для запуска операционной системы UMIX, предоставленной организаторами. Затем взломать её, используя новые языки программирования с необычным синтаксисом, например, 2D и версию BASIC с римскими числами. Множество мини-загадок с упрощенными версиями или пародиями на предыдущие игры.
2007 Utrecht University Реализовать двухстадийную виртуальную машину, исполняющую строку, похожую на ДНК для получения изображения. Для заданной строки найти префикс, который при добавлении к строке создаст изображение, наиболее похожее на целевое.
2008 Portland State University и University of Chicago Система управления марсоходом, реализующая возврат к базе. Требуется избегать препятствия и врагов.
2009 University of Kansas Управление спутником на орбите Земли: переходы между орбитами и стыковка с другими спутниками.
2010 Leipzig University of Applied Science, Германия Международное производство автомобилей и топлива.
2011 Tohoku University, Япония Программирование компьютера с 256 «ячейками» для победы над оппонентом по количеству слотов, оставшихся в конце матча. Между решениями участников устроен двухуровневый турнир.
2012 University of St. Andrews, Шотландия Реализовать Искусственный интеллект для игры типа Boulder Dash.
2013 Microsoft Research, США Подобрать арифметическо-логическую функцию по примерам параметров и выходных значений.
2014 Оксфордский университет Создать программу для прохождения лабиринта похожего на игру Pac-Man.
2015 Galois[2], США Создать программу для прохождения игры, похожей на тетрис.
2016 Университет электро-коммуникаций, Токио Создать программу для восстановления развертки origami по внешнему виду собранной плоской фигуры.
2017 Университет Эдинбурга Создать программу для игры в аналог Ticket to Ride.
2018 Rochester Institute of Technology, США Создать программу, генерирующую команды для наноботов, которые должны собирать, разбирать или пересобирать заданные 3D объекты, минимизируя затраченную энергию.
2019 Yale-NUS College[en] и Национальный университет Сингапура, Сингапур Создать программу, управляющую роботом-маляром, который должен нанести покрытие на все клетки карты уровня. Цель — покрыть всю поверхность уровня за минимальное время, собирая и применяя различные бустеры, разбросанные по карте.
2020 СКБ Контур Реализовать виртуальную машину по спецификации, полученной от инопланетян, запустить на ней полученный от инопланетян игровой сервер, понять правила игры (двумерная космическая битва на орбите планеты с дискретной физикой на Чебышевских расстояниях, с командами: ускорение, выстрел, деление и самодетонация), написать бота для участия в чемпионате по этой игре.

Победители

Наградой является небольшая денежная сумма, которая позволяет победителю компенсировать затраты на посещение конференции ICFP. Жюри присуждает несколько наград:

Первый приз
[Язык 1] как средство программирования для проницательных хакеров.
Второй приз
[Язык 2] как удобное средство для разработки множества приложений.
Третий приз
[Язык 3] тоже не слишком запущенный.
Победитель дивизиона "lightning"
[Язык L] хорошо подходит для быстрого прототипирования.
Приз жюри
[Команда X] - очень крутая группа хакеров.

Если победители использовали несколько языков, то они номинируют один или два языка из использованных.

Год Первый приз Второй приз Третий приз "Lightning"
1998 Cilk OCaml
1999 OCaml Haskell -
2000 OCaml OCaml
2001 Haskell Dylan
2002 OCaml C -
2003 C++ C++ OCaml
2004 Haskell Haskell и C++ Java и C++
2005 Haskell Dylan Haskell
2006 2D[3] D Язык ассемблера
2007 C++ Perl без победителя
2008 Java ML[4]
2009 C++ Java ML[5]
2010 C++, Haskell, Python Sage
2011[6] F# Shell и C++
2012 C++
2013[7] Java, C#, C++, PHP, Ruby and Haskell C#, C++
2014 Haskell
2015 C++, Java, C#, PHP, Ruby and Haskell
2016[8] Java, C++, C#, PHP, Haskell C++, Ruby, Python, Haskell, Java, JavaScript OCaml
2017[9] C++ C++ OCaml
2018[10] Rust C++, Python, Ruby, JavaScript, Bash и SQL OCaml
2019[11] Rust C++ C++ и Haskell
2020[12] Python C++ (первый победитель), Rust (второй победитель) Haskell

См. также

Примечания

  1. Antomata — The Language of Ant Wars Архивировано 29 сентября 2007 года.
  2. ICFP Programming Contest set to take place this weekend - Galois, Inc. (англ.). Galois, Inc.. Дата обращения: 26 ноября 2015. Архивировано 26 ноября 2015 года.
  3. 2D - искусственный язык придуманный для конкурса 2006 года. Победители использовали C++, Haskell, Python, Bash, 2D и неназванный закрытый язык, используемый в корпорации Google Inc (ныне - Alphabet).
  4. http://web.cecs.pdx.edu/~sheard/2008IcfpContest/ Архивная копия от 8 апреля 2011 на Wayback Machine - accessed Semtember 23, 2009
  5. http://www.vimeo.com/6613815 Архивная копия от 9 ноября 2012 на Wayback Machine - accessed September 23, 2009
  6. ICFP Programming Contest 2012 (англ.) (недоступная ссылка). icfpcontest.org. Дата обращения: 13 сентября 2012. Архивировано 21 апреля 2012 года.
  7. ICFP Programming Contest 2013 (недоступная ссылка). Дата обращения: 16 октября 2013. Архивировано 16 октября 2013 года.
  8. ICFP Programming Contest 2016
  9. ICFP Programming Contest 2017. Дата обращения: 29 мая 2021. Архивировано 5 марта 2021 года.
  10. ICFP Programming Contest 2018. Дата обращения: 16 мая 2020. Архивировано 31 октября 2020 года.
  11. Final Results (англ.). ICFP Programming Contest 2019 (20 августа 2019). Дата обращения: 15 июля 2020. Архивировано 7 ноября 2020 года.
  12. ICFP Programming Contest Awards and Reports (англ.) (26 августа 2020). Дата обращения: 29 мая 2021. Архивировано 2 июня 2021 года.

Постоянные команды-участницы

Ссылки

Ant War game