For the past day and half, my focus has been on the ICFP 2006 Programming Contest. Yesterday, the organizers released what they called "The Codex" without any explanation of its nature. This of course led to considerable speculation and analysis. The organizers have been trying their best to mislead us with red herrings. For example, embedded in the codex is the following GIF image
Not to mention another version of the same image in a bitmap format, as well as numerous conspiratorial strings.
However, it turns out that the codex is actually an executable for the "Universal Machine", so the first order of business was to write a virtual machine to run it. Peng hacked out a Haskell based virtual machine in short order, but it proved to be far too slow to be usable. Luke came to our rescue with a C++ based virtual machine that was fast enough to get us to the point where we got the codex to dump a new program. The fun was only beginning.
The Universal Machine image produced by the codex is an image of the "UMIX" operating system, that presented us with a login. Logging as a guest presented us with faux Unix shell where we discovered we had e-mail, which provided us with more clues. In particular, the task was to finish a program written in BASIC to crack passwords on the machine. That's right. They implemented their own BASIC interpreter inside of this thing. Not only that, to make life difficult, all numbers in this variant of BASIC had to be entered as Roman Numerals.
Cracking passwords made several other accounts accessible, each presenting challenges to obtain more points and clues. For example, one account had an adventure game in its home directory. Another had an interpreter for a two-dimensional circuit based language. And another an interpreter for some kind of term rewriting language called O'Cult. There also seems to be a problem involving "antomata". Yes, "ant".
The folks at CMU have put a crazy amount of effort into this. I'm almost certain that they must have some kind of ML to Universal Machine compiler that they used to write all of this.
Anyway, I'm just resting my brain for now, and will perhaps attack some more problems before I call it a night. However, at the moment, I'm really curious as to where any additional programing effort external to their OS may be required. Because just about the only way to go to get a half-way decent virtual machine was to use C or C++. And it seems kind of suspect that they would want to encourage people to use imperative languages to win the contest. We'll see I guess. There are still forty-eight plus hours left in the contest.