The ICFP 2006 Programming Contest was one of my favorite fun programming challenges. I didn't find out about the contest until long after it had finished, but the spec is still online and it's a fun challenge to tackle.
The contest involves writing a virtual machine for an encrypted "codex" file that they provide. Once you've written a working virtual machine the codex boots to a unix-like machine with a command prompt. Inside of that machine there are a number of other challenges to solve.
The virtual machine was a lot of fun to write, and there's nothing like the experience of booting that machine for the first time and seeing everything running.