TopCoder.com is a website that hosts regular (weekly) open programming contests and rates its members according to their performance in these contests, as well as in annual Tournaments, some open to everyone and some particularly for students. The algorithm contests draw the most competitors and take less than 2 hours to compete in. Additionally, they hold contests in component design, component development, application assembly (assembling an application from the components), application testing, and graphic design. It's a great place to practice, learn and show off your programming and problem-solving skills.
I have enought programming projects running, but this one is really intresting! How is the rating of your submission determined? --Krabb
The format of the algorithm matches is they give you three problems, given point values ahead of time based on difficulty (you can see these point values, and the idea is that before seeing the problems, you know there's an "easy", "medium" and "hard" problem. When you submit a solution, you get points proportional to that point value, but less than it by some amount that is determined by the amount of time it took you to create the solution (the actual formula is [here]). If you find a bug in your solution after submitting it, you can resubmit it, but you take the penalty for the extra time as well as an additional 10% penalty for resubmitting (although you never get less than 30% of the initial point value). At the end of 75 minutes, there's a 5-minute break, followed by a 15-minute "challenge phase". During the challenge phase, you can look at the solutions of other people in your room (you are divided into chat rooms to compete in with about 20 people at the start of the competition), and if you find one that is incorrect and can enter a valid input for which it fails (or times out), you get 50 points and they lose all points for that problem. If you're wrong, you lose 25 points. After the challenge phase, everyone's solution is run against a larger set of test cases, and if your solution returns an incorrect answer or takes too long or crashes on any of those inputs, you lose the points for that problem. It's a very all-or-nothing format that doesn't give you any credit for buggy code :-)
After all that happens, everyone who competed (in your division) is ordered by how many points they (still) have. There's a ridiculously complicated [algorithm] which then updates everyone's ratings under the general sense that everyone has some level of ability and a level of volatility, and their level of performance in any match is a random normally distributed variable with a mean of their ability and a standard deviation of their volatily. It's kind of like Elo's system with the idea that not everyone's standard deviation is the same. The main gist of the rating formula is that every match you have some expected ranking that depends on who else is competing, and if you rank better than that, your rating goes up, and if you rank worse than that, your rating goes down. -- Kawigi