Concursul de programare ICFP este o competiție internațională de programare care se desfășoară anual în iunie-iulie din 1998. Rezultatele competiției sunt anunțate la Conferința Internațională de Programare Funcțională .
Comenzile pot fi de orice dimensiune și pot folosi orice limbaj de programare (sau mai multe limbi). Nu există taxe de participare. Participanții au la dispoziție 72 de ore pentru a finaliza sarcinile și a-și trimite soluțiile prin Internet . Uneori există un turneu blitz de 24 de ore.
Câștigătorii au dreptul special de a pretinde că limba lor preferată este „alegerea hackerului pretențios”. Astfel, unul dintre scopurile competiției este acela de a putea arăta posibilitățile limbajului de programare și instrumentele utilizate de participantul la concurs. Câștigătorii premiilor de top au folosit anterior limbaje precum Haskell , OCaml , C++ , Cilk și Java pentru a rezolva probleme .
An | Organizator | O sarcină |
---|---|---|
1998 | Institutul de tehnologie din Massachusetts | Scrieți un program care simulează un vlăstar , un fel de joc tic-tac-toe . Programele prezentate au fost împărțite pe primul și al doilea loc. |
1999 | Universitatea Harvard | Optimizarea expresiilor de caz (în descrierea sarcinii se spunea despre o căutare text , dar de fapt sarcina s-a redus la optimizarea descrierii unui astfel de joc). |
2000 | Universitatea Cornell | Implementați calea fasciculului folosind sintaxa de tip Postscript . |
2001 | INRIA Rocquencourt | Optimizarea limbajului de marcare asemănător HTML prin eliminarea spațiilor inutile, etichetelor etc. |
2002 | OGI Scoala de Stiinte si Inginerie | Implementați roboți care se pot juca unul împotriva celuilalt într-un joc precum Sokoban . |
2003 | Universitatea Tehnică Chalmers | Implementați roboți capabili să conducă o mașină la cea mai mare viteză posibilă pe piste de complexitate diferită. |
2004 | Universitatea din Pennsylvania | Colonie de furnici. Creați o colonie care poate livra hrană la furnicar mai repede și evita alte specii de furnici. Soluția a fost mașina statului. Sarcina a fost ulterior adaptată în jocul de programare de strategie Ant Wars cu Antoma, [1] limbaj de descriere a mașinii cu stări finite . |
2005 | grupul PLT | Implementați roboți pentru jocul „Cops & Robbers”. Soluția au fost două programe de control, unul pentru un robot de tâlhar a cărui sarcină era să jefuiască toate băncile din vecinătate fără a fi prins de poliție, celălalt pentru un robot de poliție care prinde hoți. |
2006 | Universitatea Carnegie Mellon | Implementați o mașină virtuală pentru a rula sistemul de operare UMIX oferit de organizatori. Apoi spargeți-l folosind noi limbaje de programare cu sintaxă neobișnuită, cum ar fi 2D și versiunea cu cifre romane a BASIC . Multe mini-mistere cu versiuni simplificate sau parodii ale jocurilor anterioare. |
2007 | Universitatea din Utrecht | Implementați o mașină virtuală în două etape care execută un șir asemănător ADN-ului pentru a obține o imagine. Pentru un șir dat, găsiți un prefix care, atunci când este adăugat la șir, va produce o imagine care este cel mai asemănătoare cu ținta. |
2008 | Universitatea de Stat din Portland și Universitatea din Chicago | Sistemul de control rover care implementează întoarcerea la bază. Este necesar pentru a evita obstacolele și inamicii. |
2009 | Universitatea din Kansas | Control prin satelit pe orbita Pământului: tranziții între orbite și andocare cu alți sateliți. |
2010 | Universitatea de Științe Aplicate din Leipzig , Germania | Producția internațională de vehicule și combustibili. |
2011 | Universitatea Tohoku , Japonia | Programarea unui computer cu 256 de „slot” pentru a învinge un adversar cu numărul de sloturi rămase la sfârșitul unui meci. Între deciziile participanților, se organizează un turneu pe două niveluri. |
2012 | Universitatea St. Andrews , Scoția | Implementați inteligența artificială pentru un joc precum Boulder Dash . |
2013 | Microsoft Research , SUA | Selectați o funcție aritmetică-logică folosind exemple de parametri și valori de ieșire. |
2014 | Universitatea Oxford | Creați un program pentru a finaliza un labirint similar cu jocul Pac-Man . |
2015 | Galois [2] , SUA | Scrieți un program pentru a finaliza un joc similar cu Tetris . |
2016 | Universitatea de Electro-Comunicații, Tokyo | Creați un program pentru a restabili matura origami din aspectul figurii plate asamblate. |
2017 | Universitatea din Edinburgh | Creați un program pentru redarea unui analog al Ticket to Ride. |
2018 | Institutul de Tehnologie Rochester , SUA | Creați un program care generează comenzi pentru nanoboții care trebuie să asambleze, să dezasamblați sau să reasamblați anumite obiecte 3D, reducând la minimum energia cheltuită. |
2019 | Colegiul Yale-NUS și Universitatea Națională din Singapore , Singapore | Creați un program care controlează un robot pictor care trebuie să acopere toate celulele hărții de nivel. Scopul este de a acoperi întreaga suprafață a nivelului într-un timp minim prin colectarea și aplicarea diverșilor amplificatori împrăștiați în jurul hărții. |
2020 | SKB Kontur | Implementați o mașină virtuală conform specificației primite de la extratereștri, rulați un server de joc primit de la extratereștri pe ea, înțelegeți regulile jocului (bătălie spațială bidimensională pe orbită planetară cu fizică discretă la distanțe Chebyshev, cu comenzi: accelerare, împușcare , divizie și autodetonare), scrieți un bot pentru a participa la campionatul pentru acest joc. |
Premiul este o sumă mică de bani care permite câștigătorului să compenseze costul participării la conferința ICFP. Juriul acordă mai multe premii:
Primul premiu [Limba 1] ca instrument de programare pentru hackeri astuți. Locul doi [Limba 2] ca instrument convenabil pentru dezvoltarea multor aplicații. Premiul III [Limba 3] , de asemenea, nu rulează prea mult. Câștigător al diviziei Lightning [Limba L] este potrivită pentru prototiparea rapidă. Premiul juriului [Team X] este un grup foarte tare de hackeri.Dacă câștigătorii au folosit mai multe limbi, vor nominaliza una sau două dintre limbile folosite.
An | Primul premiu | Locul doi | Premiul III | "Fulger" |
---|---|---|---|---|
1998 | Cilk | OCaml | ||
1999 | OCaml | Haskell | - | |
2000 | OCaml | OCaml | ||
2001 | Haskell | Dylan | ||
2002 | OCaml | C | - | |
2003 | C++ | C++ | OCaml | |
2004 | Haskell | Haskell și C++ | Java și C++ | |
2005 | Haskell | Dylan | Haskell | |
2006 | 2D [3] | D | limbaj de asamblare | |
2007 | C++ | Perl | nici un câștigător | |
2008 | Java | ML [4] | ||
2009 | C++ | Java | ML [5] | |
2010 | C++ , Haskell , Python | Salvie | ||
2011 [6] | F# | Shell și C++ | ||
2012 | C++ | |||
2013 [7] | Java, C#, C++, PHP, Ruby și Haskell | C# , C++ | ||
2014 | Haskell | |||
2015 | C++, Java, C#, PHP, Ruby și Haskell | |||
2016 [8] | Java , C++ , C# , PHP , Haskell | C++ , Ruby , Python , Haskell , Java , JavaScript | OCaml | |
2017 [9] | C++ | C++ | OCaml | |
2018 [10] | Rugini | C++ , Python , Ruby , JavaScript , Bash și SQL | OCaml | |
2019 [11] | Rugini | C++ | C++ și Haskell | |
2020 [12] | Piton | C++ (primul câștigător), Rust (al doilea câștigător) | Haskell |
Joc Războiul furnicilor
Concursuri de programare | |
---|---|
Competiție | |
Organizații |