ICFP Programming Contest
The ICFP Programming Contest is an international programming competition held annually around June or July since 1998, with results announced at the International Conference on Functional Programming.
Teams may be of any size and any programming language(s) may be used. There is also no entry fee. Participants have 72 hours to complete and submit their entry over the Internet. There is often also a 24-hour lightning division.
The winners reserve "bragging rights" to claim that their language is "the programming tool of choice for discriminating hackers". As such, one of the competition's goals is to showcase the capabilities of the contestants' favorite programming languages and tools. Previous first prize winners have used Haskell, OCaml, C++, Cilk, Java, F#, and Rust.
The contests usually have around 300 submitted entries.[1][2]
Traditions
[edit]A notable tradition of the ICFP Programming Contest is the release of elaborate pre-contest teasers designed to spark excitement and speculation within the community. These often take the form of cryptic "spoilers" or narrative puzzles that engage teams long before the official start.
A standout example is the 2011 contest, where a small image of books adorned with the Greek letter lambda-displayed on the contest website[3] - was subtly modified to be much larger than its visual content suggested. Labeled with the hint "What’s in an image?", the file was discovered to have a ZIP archive appended to it. When extracted, the archive revealed a Java JAR file containing a program. Running this program generated a second image, which itself contained another embedded ZIP/JAR, creating a self-referential loop[4]. Hidden within this intricate Easter egg was a crucial clue to the year's challenge.
Another legendary instance was the 2020 contest, which featured a fictional storyline centered on the Pegovka Observatory, where a Russian astronomer named Ivan Zaitsev was said to be receiving mysterious alien signals. This unfolding narrative was shared through blog posts and videos, building anticipation by presenting the incoming data as part of an immersive sci-fi mystery[5].
These creative, meta-level puzzles exemplify the contest's spirit of intellectual playfulness and technical ingenuity. In other years, organizers have similarly warmed up the community with cryptic images, themed tweets, or subtle references to past contests, such as recurring characters or inside jokes, reinforcing a strong sense of continuity and shared culture among participants.
Past tasks
[edit]Year | Organiser | Description |
---|---|---|
1998 | Université de Montréal and Massachusetts Institute of Technology | Write a program that plays pousse, an odd variant of tic-tac-toe. Contestant programs were entered into a tournament to determine the first- and second-place program. |
1999 | Harvard University | Size-optimize case statements (the contest task spoke about text-based adventure games, but in fact the task was to size-optimize the description of such a game). |
2000[6] | Cornell University | Implement a ray tracer using a Postscript-like syntax. |
2001[7] | INRIA Rocquencourt | Size-optimize an HTML-like markup language by removing unnecessary whitespace and tags, and so on. |
2002[8] | OGI School of Science and Engineering | Implement robots playing a Sokoban-like game one against each other. |
2003[9] | Chalmers University | Implement robots driving a car as fast as possible through different racing tracks. |
2004 | University of Pennsylvania | Design an ant colony that will bring the most food particles back to its anthill, while fending off ants of another species. The contest entry would output a state-machine description of the ant: in principle, entries could have been written by hand. Later the task was adapted into Ant Wars, a strategy and programming game where each participant is a species of ant. The participants then, in a language called Antomata,[10] program a finite-state machine to function as the brain of each ant. The ant brain then controls the ant to find and collect food to bring to the home ant hill, to fend off attackers or make trails of pheromones. |
2005[11] | PLT group | Implement "bots" for a "Cops & Robbers" game: contestants have to write the control program that guides a Robber-Bot through a quiet urban neighborhood on a mission to rob every bank without getting caught, and the control program for a Cop-Bot dedicated to stopping it. |
2006[12] | Carnegie Mellon University | Implement a virtual machine that runs an operating system (called UMIX) provided by the judges, and crack it using new programming languages with unconventional syntax and semantics, such as 2D and a version of BASIC using Roman numerals. Many puzzles were tiny versions or parodies of previous contests. |
2007[13] | Utrecht University | Implement a 2-stage virtual machine that executes a DNA-like string to produce an image. Then, given an input string for this machine, find a prefix that when added to this string yields an image as close as possible to the given target image. |
2008[14] | Portland State University and the University of Chicago | Provide a Mars rover control system that will guide it to a home base while avoiding obstacles and enemies. |
2009[15] | University of Kansas | Control a satellite to move between specified orbits and rendezvous with other satellites. |
2010 | Leipzig University of Applied Science, Germany | International Car and Fuel Production. |
2011[16] | Tohoku University, Japan | Program a computer with 256 "slots" to outlast its opponent in terms of slots remaining at the end of the match. Submissions include executables that are entered into a two-phase tournament. |
2012[17] | University of St Andrews, Scotland | Program an AI for a Boulder Dash-like game. |
2013[18] | Microsoft Research | Guess the implementation of a blackbox function implemented in a simple functional language through querying a web service. |
2014[19] | University of Oxford and Well-Typed LLP | Write AI programs for a pacman like game, in SECD machine instruction for pacman and 8-bit machine assembly instructions for four ghosts. |
2015[20] | Galois | Write an AI for Tetris-like game on a hexagon grid field that embeds secret phrases in the move sequence. |
2016[21] | University of Electro-Communications | Write an AI to solve abstract origami. |
2017[22] | University of Edinburgh | Write an AI for a game where players in turn claim route parts on the map and the one with the best coverage wins. There are also three extensions to the main game mode, any number of which can be enabled on a map. |
2018[23] | Rochester Institute of Technology | Generate nanobot traces to construct, destruct, and reconstruct target 3D objects while minimizing energy used. |
2019[24] | Yale-NUS College and National University of Singapore | Worker-Wrappers against Bit Rot.[25]
The task is to program a robot called a worker-wrapper to efficiently wrap the entire accessible surface of a mine, transforming it into a safe storage site for obsolete software. The robot moves across a grid-based map, using its manipulators to wrap surface squares, while navigating around obstacles and utilizing collected boosters to improve efficiency. Players must generate a sequence of actions—such as moving, turning, or using boosters like extended manipulators, fast wheels, or a drill—to complete the wrapping in minimal time. Solutions are scored based on the time taken relative to the best solution, with shorter wrapping times yielding higher scores. |
2020[26] | SKB Kontur | Build virtual machine by the alien specification, run alien provided game-server on that VM, explore the game (2D space battle on the planet orbit with Chebyshev distance, with accelerate, shoot, split and detonate commands), reverse engineer game-protocol and create bot to play this game. |
2021[27] | Alex Lang and Jasper Van der Jeugt | Manipulate a 2D stick figure, where vertices are connected by flexible edges, to fit through a polygonal hole as in the "Brain Wall" game show. The goal is to minimize the sum of squared distances from each hole vertex to the nearest figure vertex ("dislikes"), while respecting physical constraints on edge stretching. Special bonuses can be unlocked by placing vertices at specific locations, allowing relaxed rules such as breaking edges or global stretch tolerance. |
2022[28] | Alperen Keles | Develop algorithms for robotic painters tasked with transforming an initial canvas into a target image using a sequence of geometric and color operations. The core problem involved manipulating rectangular blocks on a 2D canvas through five types of moves—line cut, point cut, color, swap, and merge—each with an associated cost based on block size and operation type. Participants submitted programs in an Instruction Set Language (ISL), aiming to minimize the total cost while maximizing visual similarity to the target painting, measured via pixel-wise RGBA differences. |
2023[29] | Aymeric Fromherz | Optimize the placement of musicians on a stage to maximize audience enjoyment. Each attendee has individual musical preferences, and their happiness depends on the proximity to and volume of musicians playing their preferred instruments, while sound can be blocked by other musicians or obstacles like pillars. The task involves solving a complex spatial optimization problem under physical and geometric constraints. Additional extensions introduce factors such as musician collaboration effects and adjustable volume levels to further refine the performance quality. |
2024[30] | Jeroen Bransen, Matúš Tejiščák, Bas den Heijer, Emiel Bransen, Aymeric Fromherz | The contect centered around a custom functional language called ICFP, based on lambda calculus and serialized in a compact ASCII format. Participants submitted programs that evaluated to specific string outputs, solving a series of increasingly complex challenges. The contest featured four main problem types: "lambdaman" (pathfinding in mazes with size-optimized code), "spaceship" (trajectory control via thrust manipulation), "3d" (programming in a 2D grid-based language with time-travel semantics), and "efficiency" (analyzing and evaluating deeply nested programs, often requiring symbolic reasoning or SAT solvers). |
2025[31] | Liam O’Connor, Jack Stodart | Develop algorithms to map a labyrinthine library composed of rooms with six doors by planning exploratory expeditions. Teams must submit route plans to navigate the library and collect partial information about room labels, recorded as 2-bit values. The goal is to reconstruct the entire layout as an undirected graph using as few expeditions as possible. |
Prizes
[edit]Prizes have a modest cash value, primarily aimed at helping the winners to attend the conference, where the prizes are awarded and the judges make the following declarations:
- First prize
- [Language 1] is the programming tool of choice for discriminating hackers.
- Second prize
- [Language 2] is a fine programming tool for many applications.
- Third prize
- [Language 3] is also not too shabby.
- Winner of the lightning division
- [Language L] is very suitable for rapid prototyping.
- Judges' prize
- [Team X] are an extremely cool bunch of hackers.
Where a winning entry involves several languages, the winners are asked to nominate one or two. The languages named in the judges' declarations have been:
See also
[edit]References and notes
[edit]- ^ "ICFP Programming Contest Scoreboard". Retrieved 23 September 2012.
- ^ "Archived copy". Archived from the original on 2011-10-02. Retrieved 2011-09-22.
{{cite web}}
: CS1 maint: archived copy as title (link) - ^ "ICFP Programming Contest 2011".
- ^ "Trup 16 ICFPC 2011 Write-up" (in Russian).
- ^ "The blog of Ivan Zaitsev from Pegovka".
- ^ "The Third Annual ICFP Programming Contest".
- ^ "The Fourth ICFP Programming Contest".
- ^ "The Fifth ICFP Programming Contest".
- ^ "ICFP Programming Contest 2003".
- ^ "Antomata - The Language of Ant Wars". Archived from the original on 2007-09-29. Retrieved 2007-11-25.
- ^ "The Eighth Annual ICFP Programming Contest".
- ^ "Ninth annual ICFP Programming Contest".
- ^ "The 10th ICFP Programming Contest".
- ^ "The Eleventh ICFP Programming Contest".
- ^ "ICFP 2009 Programming Contest".
- ^ "ICFP Programming Contest 2011".
- ^ "ICFP Programming Contest 2012".
- ^ "ICFP Programming Contest 2013".
- ^ "ICFP Programming Contest 2014".
- ^ "ICFP Programming Contest 2015".
- ^ "ICFP Programming Contest 2016".
- ^ "ICFP Programming Contest 2017".
- ^ "ICFP Programming Contest 2018".
- ^ "ICFP Programming Contest 2019".
- ^ "The Contest Begins". ICFP Programming Contest 2019. 2019-06-21. Retrieved 2020-07-15.
- ^ "ICFP Programming Contest 2020".
- ^ "ICFP Programming Contest 2021".
- ^ "ICFP Programming Contest 2022".
- ^ "ICFP Programming Contest 2023".
- ^ "ICFP Programming Contest 2024".
- ^ "ICFP Programming Contest 2025".
- ^ Final results of the ICFP'99 Programming Contest
- ^ a b The contests in 1999 and 2002 had a lightning division, but without a separate prize. The winners of that division were awarded Judges' prizes.
- ^ The Third Annual ICFP Programming Contest
- ^ The Fourth ICFP Programming Contest
- ^ The Seventh Antual ICFP Programming Contest[permanent dead link]
- ^ The Eighth Annual ICFP Programming Contest
- ^ 2D was a toy language invented for the 2006 contest. The winning team used C++, Haskell, Python, Bash, and 2D.
- ^ The 2007 contest had a lightning division, but since there was no clear leader after 24 hours the judges decided not to choose a winner.
- ^ ICFP 2008 Programming Contest Results
- ^ http://www.vimeo.com/6613815 - accessed September 23, 2009
- ^ ICFP 2010 Programming Contest (video)
- ^ ICFP Programming Contest 2011
- ^ ICFP Programming Contest 2012
- ^ "ICFP Programming Contest 2013". Archived from the original on 2013-10-16. Retrieved 2013-08-15.
- ^ ICFP Programming Contest 2014
- ^ ICFP Programming Contest 2015
- ^ ICFP Programming Contest 2016
- ^ ICFP Programming Contest 2017
- ^ ICFP Programming Contest 2018
- ^ "Final Results". ICFP Programming Contest 2019. 2019-08-20. Retrieved 2020-07-15.
- ^ "ICFP Programming Contest Awards and Reports". 2020-08-26. Archived from the original on 2021-12-21. Retrieved 2021-05-29.
- ^ ICFP Programming Contest 2021
- ^ ICFP Programming Contest 2022