Konkurs programowania ICFP

ICFP Programming Contest to międzynarodowy konkurs programistyczny organizowany corocznie w okolicach czerwca lub lipca od 1998 roku, którego wyniki ogłaszane są na Międzynarodowej Konferencji Programowania Funkcjonalnego .

Zespoły mogą być dowolnej wielkości i mogą być używane dowolne języki programowania. Nie ma również opłaty za wstęp. Uczestnicy mają 72 godziny na uzupełnienie i przesłanie zgłoszenia przez Internet. Często istnieje również 24-godzinny podział odgromowy.

Zwycięzcy zastrzegają sobie „prawo do przechwalania się”, twierdząc, że ich język jest „narzędziem programistycznym wybieranym przez dyskryminujących hakerów”. W związku z tym jednym z celów konkursu jest zaprezentowanie możliwości ulubionych języków programowania i narzędzi uczestników. Poprzedni zdobywcy pierwszej nagrody używali Haskell , OCaml , C++ , Cilk , Java , F# i Rust .

Na konkursy zazwyczaj nadesłanych jest około 300 prac.

Przeszłe zadania

Rok Organizator Opis
1998 Université de Montréal i Massachusetts Institute of Technology Napisz program, który odtwarza pousse , dziwną odmianę gry w kółko i krzyżyk. Programy uczestników zostały zgłoszone do turnieju w celu ustalenia programu pierwszego i drugiego miejsca.
1999 Uniwersytet Harwardzki Zoptymalizować rozmiar instrukcji przypadków (zadanie konkursowe dotyczyło tekstowych gier przygodowych , ale w rzeczywistości zadaniem było zoptymalizowanie rozmiaru opisu takiej gry).
2000 Uniwersytet Cornella Zaimplementuj śledzenie promieni przy użyciu składni podobnej do Postscriptu.
2001 INRIA Rocquencourt Zoptymalizuj rozmiar języka znaczników podobnego do HTML, usuwając niepotrzebne spacje, znaczniki i tak dalej.
2002 Szkoła Nauki i Inżynierii OGI Zaimplementuj roboty grające przeciwko sobie w grę podobną do Sokoban .
2003 Uniwersytet Chalmersa Zaimplementuj roboty prowadzące samochód tak szybko, jak to możliwe, po różnych torach wyścigowych.
2004 Uniwersytet Pensylwanii Zaprojektuj kolonię mrówek, która przywiezie najwięcej cząstek jedzenia z powrotem do mrowiska, jednocześnie odpierając mrówki innego gatunku. Zgłoszenie konkursowe generowałoby opis mrówki na maszynie stanowej: w zasadzie zgłoszenia mogły być pisane odręcznie. Później zadanie zostało zaadaptowane do Ant Wars, strategiczno - programistycznej , w której każdy uczestnik jest gatunkiem mrówki . Następnie uczestnicy, w języku zwanym Antomata, programują skończoną maszynę stanów , aby funkcjonowała jako mózg każdej mrówki. Mózg mrówki następnie kontroluje mrówkę, aby znaleźć i zebrać pożywienie, aby przynieść je do domu , aby odeprzeć napastników lub zrobić ślady feromonów.
2005 grupa PTL Zaimplementuj „boty” do gry „Gliniarze i złodzieje”: uczestnicy muszą napisać program kontrolny, który poprowadzi Robber-Bota przez cichą miejską dzielnicę z misją obrabowania każdego banku, nie dając się złapać, oraz program kontrolny dla Bot poświęcony powstrzymaniu go.
2006 Carnegie Mellon University Zaimplementuj maszynę wirtualną z systemem operacyjnym (zwanym UMIX) dostarczonym przez jurorów i złam ją, używając nowych języków programowania o niekonwencjonalnej składni i semantyce, takich jak 2D i wersja języka BASIC wykorzystująca cyfry rzymskie . Wiele zagadek było miniaturowymi wersjami lub parodiami poprzednich konkursów.
2007 Uniwersytet w Utrechcie Zaimplementuj dwuetapową maszynę wirtualną, która wykonuje łańcuch podobny do DNA w celu wytworzenia obrazu. Następnie, biorąc pod uwagę ciąg wejściowy dla tej maszyny, znajdź przedrostek, który po dodaniu do tego ciągu daje obraz jak najbardziej zbliżony do danego obrazu docelowego.
2008 Portland State University i University of Chicago Zapewnij system sterowania łazikiem marsjańskim, który poprowadzi go do bazy domowej, unikając przeszkód i wrogów.
2009 Uniwersytet Kansas Kontroluj satelitę, aby poruszać się między określonymi orbitami i spotykać się z innymi satelitami.
2010 Wyższa Szkoła Nauk Stosowanych w Lipsku , Niemcy Międzynarodowa produkcja samochodów i paliw.
2011 Uniwersytet Tohoku w Japonii Zaprogramuj komputer z 256 „przedziałami”, aby przeżył przeciwnika pod względem liczby pozostałych miejsc na koniec meczu. Zgłoszenia obejmują pliki wykonywalne, które są wprowadzane do turnieju dwufazowego.
2012 Uniwersytet St Andrews w Szkocji Zaprogramuj sztuczną inteligencję do gry podobnej do Boulder Dash .
2013 Badania Microsoftu Zgadnij implementację funkcji czarnej skrzynki zaimplementowanej w prostym języku funkcjonalnym, wysyłając zapytanie do usługi internetowej.
2014 University of Oxford i Well-Typed LLP Napisz programy AI dla gry podobnej do pacmana, w instrukcjach maszynowych SECD dla pacman i 8-bitowych instrukcjach montażu maszyn dla czterech duchów.
2015 Galois Napisz grę typu AI dla Tetrisa na sześciokątnym polu siatki, która osadza tajne frazy w sekwencji ruchów.
2016 Wyższa Szkoła Elektrokomunikacji Napisz sztuczną inteligencję, aby rozwiązać abstrakcyjne origami .
2017 Uniwersytet w Edynburgu Napisz sztuczną inteligencję do gry, w której gracze po kolei przejmują części trasy na mapie, a wygrywa ten, który ma najlepszy zasięg. Istnieją również trzy rozszerzenia głównego trybu gry, z których dowolną liczbę można włączyć na mapie.
2018 Instytut Technologii w Rochester Generuj ślady nanobotów, aby konstruować, niszczyć i rekonstruować docelowe obiekty 3D, jednocześnie minimalizując zużycie energii.
2019 Yale-NUS College i Narodowy Uniwersytet Singapuru Worker-Wrappers przeciwko Bit Rot.
2020 Kontur SKB Zbuduj maszynę wirtualną zgodnie ze specyfikacją kosmitów , uruchom serwer gier dostarczony przez kosmitów na tej maszynie wirtualnej, eksploruj grę (bitwa kosmiczna 2D na orbicie planety z odległością Czebyszewa, z poleceniami przyspieszenia, strzelania, podziału i detonacji), wykonaj inżynierię wsteczną protokołu gry i utwórz bota, aby grać w tę grę.
2021 Alexa Langa i Jaspera Van der Jeugta Manipuluj figurą podobną do mechanicznego połączenia , aby zmieścić się w otworze w ścianie .
2022 Alperena Kelesa Zmień konfigurację wstępnie wypełnionego płótna w obraz.

Nagrody

Nagrody mają skromną wartość pieniężną i mają przede wszystkim pomóc zwycięzcom w dotarciu na konferencję, na której wręczane są nagrody, a sędziowie składają następujące oświadczenia:

Pierwsza nagroda
[Język 1] to narzędzie programistyczne wybierane przez wybrednych hakerów.
Druga nagroda
[Język 2] to znakomite narzędzie programistyczne do wielu zastosowań.
Trzecia nagroda
[Język 3] również nie jest zbyt nędzna.
Zwycięzca działu błyskawicy
[język L] doskonale nadaje się do szybkiego prototypowania.
Nagrodą sędziów
[Drużyna X] jest niezwykle fajna banda hakerów.

Jeśli zwycięska praca obejmuje kilka języków, zwycięzcy proszeni są o nominację jednego lub dwóch. Języki wymienione w oświadczeniach sędziów to:

Rok Pierwsza nagroda Druga nagroda Trzecia nagroda Błyskawica
1998 Cilk OCaml
1999 OCaml Haskella
2000 OCaml OCaml
2001 Haskella Dylana
2002 OCaml C
2003 C++ C++ OCaml
2004 Haskella Haskella i C++ Java i C++
2005 Haskella Dylana Haskella
2006 2D D Montaż
2007 C++ Perl
2008 Jawa ML
2009 C++ Jawa ML
2010 C++ , Haskell , Python SageMath
2011 F# powłoki i C++
2012 C++ OCaml Jawa
2013 Java , C# , C++ , PHP , Ruby i Haskell C++ i Pythona C# , C++ , bash , awk , sed i Excel C++
2014 Haskella C++ Perl OCaml
2015 C++ , Java , C# , PHP , Ruby i Haskell C++ , Pythona , JavaScriptu C++ C++
2016 Java , C++ , C# , PHP , Haskell C++ , Ruby , Python , Haskell , Java , JavaScript OCaml
2017 C++ C++ OCaml
2018 Rdza C++ , Python , Ruby , JavaScript , bash i SQL OCaml
2019 Rdza C++ C++ i Haskella
2020 Pyton C++ (pierwszy zwycięzca), Rust (drugi zwycięzca) Haskella
2021 C++ , Rdza Rdza Rust , TypeScript i Go Rust , TypeScript i Go
2022 Rusta , Go i Pythona Rusta , C++ i Pythona C++ , Rusta i Pythona Rusta , C++ i Pythona

Zobacz też

Referencje i notatki

  1. ^ „Tablica wyników konkursu programistycznego ICFP” . Źródło 23 września 2012 r .
  2. ^ https://alliance.seas.upenn.edu/~plclub/cgi-bin/contest/results.php
  3. ^ „Antomata - język wojen mrówek” . Zarchiwizowane od oryginału w dniu 2007-09-29 . Źródło 2007-11-25 .
  4. ^ „Konkurs się rozpoczyna” . Konkurs programistyczny ICFP 2019 . 2019-06-21 . Źródło 2020-07-15 .
  5. ^ Ostateczne wyniki konkursu programistycznego ICFP'99
  6. ^ a b Konkursy w 1999 i 2002 roku miały podział błyskawicy, ale bez oddzielnej nagrody. Zwycięzcom tej kategorii przyznano nagrody sędziowskie.
  7. ^ Trzeci doroczny konkurs programistyczny ICFP
  8. ^ Czwarty konkurs programistyczny ICFP
  9. ^ Siódmy doroczny konkurs programowania ICFP
  10. ^ Ósmy doroczny konkurs programistyczny ICFP
  11. ^ 2D był językiem zabawek wymyślonym na potrzeby konkursu w 2006 roku. Zwycięski zespół używał języków C++ , Haskell , Python , Bash i 2D.
  12. Konkurs z 2007 roku miał błyskawiczny podział, ale ponieważ po 24 godzinach nie było wyraźnego lidera, sędziowie postanowili nie wybierać zwycięzcy.
  13. ^ Wyniki konkursu programistycznego ICFP 2008
  14. ^ http://www.vimeo.com/6613815 - dostęp 23 września 2009
  15. ^ Konkurs programistyczny ICFP 2010 (wideo)
  16. ^ Konkurs programistyczny ICFP 2011
  17. ^ Konkurs programistyczny ICFP 2012
  18. ^ „Konkurs programistyczny ICFP 2013” ​​. Zarchiwizowane od oryginału w dniu 2013-10-16 . Źródło 2013-08-15 .
  19. ^ Konkurs programistyczny ICFP 2014
  20. ^ Konkurs programistyczny ICFP 2015
  21. ^ Konkurs programistyczny ICFP 2016
  22. ^ Konkurs programistyczny ICFP 2017
  23. ^ Konkurs programistyczny ICFP 2018
  24. ^ „Ostateczne wyniki” . Konkurs programistyczny ICFP 2019 . 2019-08-20 . Źródło 2020-07-15 .
  25. ^ „Nagrody i raporty z konkursów programistycznych ICFP” . 2020-08-26. Zarchiwizowane od oryginału w dniu 2021-12-21 . Źródło 2021-05-29 .
  26. ^ Konkurs programistyczny ICFP 2021
  27. ^ Konkurs programistyczny ICFP 2022

Linki zewnętrzne