Interesting programming contests
In the last few years I’ve competed in a few algorithmic programming contests, which are great fun! Sometimes performing well, sometimes screwing up, it’s always a great learning experience, and you meet people who are really, really good.
Right now I’m with some guys in a house in Putten, working on the CodeCup, so this is a nice time to take a break and write down what I think are cool contests, and what makes each contest unique.
I’ll only cover algorithmic contests that are interesting for students, so contests like the Netflix Prize (which is very cool, though!) won’t be in this list.
University team contests
This is probably the most common type of contest: almost every university with a strong Computer Science department somehow gets involved in some way with this kind of challenge. Local rules may vary, but the basics are simple: you work in a team – usually consisting of 2-4 team members – on a set of problems, which you can solve in languages like C, C++, Java, Pascal, etc.
In my experience, you have some kind of judging software that checks a bunch of test cases, and if all tests succeed, you’ll get points. Speed may be used to determine ties, and it’s possible to get points subtracted for each failed attempt. The contests last for a few hours, but can be the whole day. Usually only one computer terminal can be used.
At the BAPC, there was also a nice visual indicator for the progress of the teams: when a program has been submitted correctly, the team would get a balloon attached to their terminal. :-)
Olympiad
The Olympiad in Informatics is a contest for high school students. In many countries preliminary rounds are held, with a final competition in a foreign country. While I’ve never got through to the IOI (one place too low in the national ranking), it is a nice contest, and definitely worth looking into, even if you’re not on high school anymore.
The contest rules are very similar to the common team contests, only you’ve got to do it on your own! Often, problems are divided into subproblems, and the scoring is a bit different. You’ll get points for each test case that succeeds, only you don’t get to see how much cases actually work. So an inefficient program will get points, but less points than an efficient program.
Also, when you get to the third round (at least, here in the Netherlands), you’ll get a few days of training, which is very thorough. You’re bombarded with lessons on algorithms and software design: if you’d remember only half of what’s being told, you’ve learned a damn lot.
CodeCup
This is a totally different type of contest: you have to write a reactive program, to play a game. It’s actually part of the first round of the Dutch Olympiad, but open for anyone to join. Every year there is a game to be played, with every two weeks a competition. Computer programs compete in a Swiss system tournament, while being monitored by a manager and referee system. The final round is in January or February, on which the best contestants get (small) prizes.
Topcoder
Topcoder is a fast-growing site on which contestants can solve all kinds of problems, which is rewarded with serious money. The most fun part, in my opinion, are the algorithm contests, which are held quite frequently. You’ll not get prizes for these competitions, other than a high rating, but they’re awesome. Usually they’re very short, spanning only two hours, but sometimes there are ‘marathons’.
These competitions are unique not only because they are very short and fast-paced, but also because of the Challenging Phase. Users are split in two divisions, based on their rating, and in each division there are rooms, each holding 20 people. Those other people are your direct opponents, not only during the coding, but also when you’re done with that. After a fixed time, you can see the source files of your roommates, and propose test cases on which their programs will fail. If you’re right, they lose points (while you gain), when you’re wrong its the other way around. Very cool!
Google Code Jam
This competition, hosted by Google, is again completely different. Instead of submitting your program, which then will be tested on the server, you’ll have to run it offline. You’ll have to download an input file, after which you have a few minutes to send the correct output back. The nice part about this is that you can use literally any method to generate the output. If you have a trained monkey in your room who calculates the answer, that’s just fine!
A competition which is quite similar in this regard is Project Euler. There are, however, no time limits for the problems: there is a fixed list of problems you can choose from. This is great for practice and developing mathematical skills.
What else?
There are many more cool competitions, some even take years to complete. Some are focused on writing clean code, others on writing obscure code, or even code with hidden bugs. There are contests in artificial intelligence, math problems and software design skills: browse these lists to find what you like.
Practice
Although it’s most fun to actually participate in a competition, it is good to practice from time to time. Most competitions already mentioned have an excellent archive (such as the American Olympiad), but there are some more resources to learn from, a nice one is the Sphere Online Judge.
What competition do you like? Is there a nice one everyone should know about? Please leave a message!
Category: Competitions, Software | One comment »









December 2nd, 2009 at 18:52
CodeCup rocks!