TopCoder
From Free net encyclopedia
TopCoder is a company which hosts regular online programming contests, as well as a larger and more structured yearly contest, the TopCoder Open. The term "topcoder" may also refer to a person who competes in these contests.
TopCoder has been hosting algorithm competitions since 2001. Each contest consists of four phases:
- Coding phase (75 minutes) - Coders write programs to solve three short problems using [[C++]], Java, C#, or Visual Basic. Each problem set consists of an easy, medium, and hard question, the difficulty of which is reflected in each problem's point value. A common point value distribution is 250-500-1000, though this varies; the values of the problems vary from match to match, dependent on the difficulties of each problem. Also, the quicker a coder writes a given problem, the more points that coder gets.
- Intermission (5 minutes) - After the coding phase ends, there is a short break before the challenge phase begins. This time can be used to think of challenge cases.
- Challenge phase (15 minutes) - Coders can challenge the submitted problems of other participants in their room by constructing test cases in an attempt to generate erroneous output. The challenger receives 50 points for a successful challenge, and loses 25 points for an unsuccessful challenge. If a coder's solution is successfully challenged, that coder receives no points for the problem. Each successful challenge is added to the set of tests to be run during the System-Testing phase.
- System-Testing phase - Each problem that survives through the challenge phase is run on many diverse test cases. Coders are awarded points for problems that pass all test cases, based on the speed and difficulty of problems solved. At the end of the contest, ratings are updated to incorporate each participating coder's performance.
TopCoder initially awarded money every week to coders who did well in the weekly competitions, or Single Round Matches (SRMs). SRMs are now sponsored by outside companies such as Google and Yahoo!, and for a while, prize money was only awarded twice a year to winners and finalists of the TopCoder Collegiate Challenge (TCCC, which is in the spring) and the TopCoder Open (formerly the Invitational, which is in the fall). As of June 2005, some weekly SRMs began to once again award prize money.
The business plan behind topcoder.com comprises several objectives. One goal is to be a recruitment center where companies can come and find programmers who are proven to be highly skilled. Another aim is to be an outsourcing center. TopCoder also hosts design and development competitions in which coders can compete to create components and applications that third parties have contracted for.
TopCoder design and development competitions are week-long competitions. New components are posted every Wednesday, and coders can choose a component from a list of Java and .NET components, and they have a week to design or develop their chosen component. Each week new components are posted. Development components are generally components that have been designed in a previous component design contest.
In the early days, the Iron Man system was set up under which coders were grouped into rooms of ten according to skill level (determined by rating), in order to encourage newcomers (who would have little hope of beating out the best coders for prize money) to stay and compete. After the contest, the 3 highest scoring coders in each room were paid according to the skill level of the room (winners in the room of contestants with the top 10 ratings were paid more than those in the room with coders 11-20, and so on). This created some paradoxical situations such as the possibility of coming fourth in the whole contest and getting no money, while the 111th placed contestant got paid, and gave rise to ratings diving. Ratings diving, or taking a ratings dive was accomplished simply by doing very poorly on purpose in a particular contest (by opening and not submitting any problems or submitting incorrect challenges). As a result, a contestant would, in their next contest, be placed in a room with 9 coders among whom they had a good chance of winning some money. The idea was that the dramatically increased chance of winning money made up for the fact that the money to be won was a lesser amount given the lower average rating of the room.
Coders have since been divided into two divisions, Division I and Division II. Division I consists of all coders with a rating of at least 1200, and Division II consists of all coders with a rating of 1199 or less. Coders are grouped in rooms with other members of their division, in groups of up to 20 coders in such a way that within each division, the average coder ratings in each of the rooms are roughly equal.