The Contest

Convinced your favorite programming language provides unbeatable productivity? Do functional languages lead to better and faster programs? Perhaps it's just the case that functional programming languages attract better programmers than other languages... and you and your friends are the best of the best.

If so, we've provided you the opportunity to prove it! We are pleased to announce the Third Annual ICFP Programming Contest to be held in conjunction with ICFP'00. All programmers are invited to enter the contest, either individually or in teams; we especially encourage students to enter.  Please register for the contest as soon as possible.

We've designed the programming contest for direct, head-to-head comparison of language technology and programming skill. We have a range of prizes for the winners: cash awards, famous texts on functional languages donated and autographed by the authors, and, of course, unlimited bragging rights.

We hope to repeat the amazing success of the first two ICFP programming contests from 1998 and 1999.

Team Composition

Players may enter alone or as a team. Teams may be of any size -- but we'll offer the friendly advice that the organizational overhead of having more than three or four members on a team will tend to be self-limiting. Anyone is eligible to enter (even faculty!), except the Judges. We especially encourage students to enter the contest. (We even have special prizes reserved for possible student winners; see below.)  In order to participate, you should register for the contest (but you don't have to.)

Contest Overview

On Saturday, August 26, 2000 at 5PM EST a challenge task will be posted on the Internet and mailed to all registered participants. Teams will have 72 hours to implement a program to perform this task and submit this program to the contest judges.   (Unlike last year, we will not have a "lightning division".)  After completing the task, you should carefully follow these instructions for submitting your entry.

Although the precise task chosen will not be revealed until the contest begins, algorithmic cleverness matters. Performance may matter. Programming languages that help programmers to build complex systems quickly may allow contestants to attempt particularly sophisticated implementations in the 72 hours allotted for programming.

This programming contest is being conducted by ICFP, which implies a context of functional programming. However, rather than debate the definition of a "functional programming language," we will allow submitted programs to be written in any language whatsoever, as long as it has an implementation for Pentium PCs running Linux (Red Hat 6.2). Previous winning teams used languages such as Cilk and Ocaml. Mixing languages is entirely acceptable; perhaps you will use the new H/Direct tool to create the ultimate mix of Haskell and C++.


The ICFP'00 general chair has generously authorised a range of prizes to reward and recognise the contest winners: money, wisdom, and peer recognition.

Cambridge University Press has generously offered to donate two journal subscriptions to be offered as prizes.

Monetary prizes are listed and will be awarded in US dollars.

First Prize

The team winning first prize in the competition will be awarded

Second Prize

The team winning second prize in the competition will be awarded

Judge's Prize

Finally, the Judges' Prize is to be awarded, not on the basis of the competition, but solely at the whim and discretion of the judges. Novel algorithms, interesting languages, beautiful code, arresting user interfaces, these things may well count for something in the judges' eyes.

The team winning the Judges' Prize will be awarded

Prize books

At present, we are collecting books on functional programming to be given as prizes for the contest. We would like these books to be autographed by their author(s). Donations will be greatly appreciated.


To participate in the contest, your team should fill out and submit a registration form.  The information will be used only to contact participants in a timely fashion with the task details and the submission procedure.  (Strictly speaking, it is no longer necessary to register, but it helps us with planning and organization.)

Contest entrants will have exactly 3 days, from Saturday, August 26th beginning at 5:00 PM through Tuesday, August 29th at 5:00 PM Eastern Time [2:00 PM Pacific Time, 21:00 UTC], to complete the contest task.  The task description will be linked to this web page, e-mailed to all registered contestants, and posted to a set of relevant newsgroups. The description will include a detailed explanation of what to submit and how entries will be evaluated.

Contestants must submit implementations using a web-based interface that will be linked to this web page. No submissions will be accepted after 5:00 PM EDT Tuesday. You may, however, submit multiple times; the judges will use the last submission received before the contest deadline.

Details about the submission format can be found here.   The contest will be run on a Linux (Redhat 6.2), Pentium-based server.  Though we would like to support other platforms (e.g., Win32), we are unable to for various reasons.   Most likely, the server will be a 200 MHz Pentium Pro with 64MB of memory.   (We may get better machines, but don't count on it.)

Entries will be gzipped tar files.  We prefer that you ship a simple, statically-linked executable, but will try to accomodate language implementations that require a more complex configuration.  We have a list of  RPMs that we are using, and a list of paths on a machine description page.  We hope to have a test facility so that you can upload code and check that things work properly before submitting your final entry. 

What if your team has more than one good idea? We will consider multiple entries from the same team provided that the judges consider those entries to be significantly different. The judges are likely to consider use of a different algorithm or a different language to be significantly different. The judges are unlikely to consider small variations, e.g., changed heuristics for alpha-beta search, to be significantly different. Should the judges decide two entries are not sufficiently different for both to be considered, they will consult with the team to decide which should be officially entered. The judges' decisions about significant differences are final.


There is a form that should be used to register for the contest, where you provide your Team Name, a password, and an E-mail address.  We will use the E-mail address to notify you of the task description when it becomes available, and to provide detailed submission directions.  Strictly speaking, you need not register.  However, it will help us with the organization of things.  Also, you will receive timely information if we have your email address.


Greg Morrisett | John Reppy |