Ninth annual
ICFP Programming Contest
Hosted by Carnegie Mellon University's POP Group

Post-Contest Information

The contest has ended, but many people have found the task to be interesting and fun to complete even when not competing for a prize. The publications mentioned in the task description cannot be validated online or counted on the scoreboard. However, it is possible to validate publications and tally your score offline, using a program that can be discovered somewhere within the codex.


What follows are the official rules for the contest.

Dates and Times

The contest will run from July 21 to July 24, 2006. The contest task was announced at 12:00 (noon) EDT on Friday, and we will accept entries until 12:00 (noon) EDT on Monday.


This is an open contest. There is no entry fee or need to pre-register and everyone (with the exception of faculty, students, and staff of Carnegie Mellon University) is eligible. Teams may work from any location.

A team consists of every person who contributes ideas or code towards a submission. Individuals may only be members of a single team and teams may not divide or collaborate with each other once the contest has begun.

For this contest there will be two divisions: One for small teams and one for large teams. A small team consists of 0–4 persons. A large team may have any number of members. Teams may switch from the small team division to the large team division at any time (even once the contest has begun) if they wish to take on new members. Large teams are not eligible for the first place prize, but otherwise the two divisions are identical.

Language and tools

Teams may work in any programming language(s) that they wish. They may employ any computational resources at their disposal.


There will be four prizes: First, second, and third place, as well as a discretionary judges' prize. Prize money totaling $1750 US will be awarded to help defray the costs of travel to the contest for the winners and for small cash prizes. In addition, the organizers will declare during the conference that

  • The first place team's language is the programming language of choice for discriminating hackers,
  • the second place team's language is a fine tool for many applications,
  • the third place team's language is not too shabby,
  • and the team winning the judge's prize is an extremely cool bunch of hackers.

Contest-Specific Rules

  • Instructions:
    • Register to receive a decryption key.
    • Download the codex and the UM specification.
    • Implement the UM and run the codex.
    • Supply the decryption key you received from us.
    • Obtain publications and submit them.
  • The team with most points after three days wins. Earlier time of final publication will be used to break ties, where each team's final publication is the last submitted publication that increases their score.
  • Retain your source code. Top ranking teams will be required to submit their source code for peer review. After the contest, teams that wish to be considered for the Judges' Prize will submit their source code and a brief commentary.
  • Different solutions to a given task may yield different publications depending on the quality of the solution. Better solutions will yield better scoring publications. For any given task, your final score will reflect your best submitted publication.
  • A given publication will always earn the same score, regardless of when it is submitted, and regardless of any submissions of other teams.
  • All participants must adhere to the spirit of the contest. For example, teams that attempt to forge publications or manipulate the behavior of the codex will be disqualified.


  1. If I use more than one language, and I win, what language will receive the declaration?
    The winners may choose what language they wish to honor.
  2. Can I submit more than one publication for a given task? Will that affect my score?
    Yes, you can. Submitting a valid publication will never decrease your score. For some tasks you can improve your score by submitting an improved publication. Re-submitting an identical publication will never change your score.
  3. How long is the codex supposed to take to run?
    We have a variety of implementations of the Universal Machine. On a 1 Ghz Pentium M laptop, it takes us approximately 1 minute and 40 seconds to decode the codex.
  4. My UM implementation says "self-check succeeded" but fails to decrypt the codex. Is there something wrong with my decryption key?
    No, the decryption keys are correct; there is a bug in your UM implementation. The codex self-check is not at all exhaustive.
  5. What kind of reverse engineering am I allowed to do?
    If you're worried that something you plan to do might violate the spirit of the contest, please ask us first. We have discussed some specifics in a message to the announce list.
  6. Does your web server really run UM code?
    Most certainly.

Known Transcription Errors

Volume 9 of the codex contains corrections to all known transcription errors found in previous releases. If you discover any errors, please report them to the contest organizers.