Skip to content

cs-joy/cp

Repository files navigation

cp

Competitive Programming

Competitive programming is a mind sport usually held over the Internet or a local network, involving participants trying to program according to provided specifications. Contestants are referred to as sport programmers. Competitive programming is recognized and supported by several multinational software and Internet companies, such as Google and Facebook.

A programming competition generally involves the host presenting a set of logical or mathematical problems, also known as puzzles, to the contestants (who can vary in number from tens to several thousands), and contestants are required to write computer programs capable of solving each problem. Judging is based mostly upon number of problems solved and time spent for writing successful solutions, but may also include other factors (quality of output produced, execution time, memory usage, program size, etc.)

Notable competitions There are two types of competition formats: short-term and long-term. Each round of short-term competition lasts from 1 to 5 hours. Long-term competitions can last from a few days to a few months.

Short-term

  • International Collegiate Programming Contest (ICPC) – one of the oldest competitions, for students of universities in groups of 3 persons each
  • International Olympiad in Informatics (IOI) – one of the oldest competitions, for secondary school students
  • American Computer Science League (ACSL) – computer science competition with written and programming portions, for middle/high school students
  • CodeChef – competition held from 2009, there are three contests held every month[6] and an annual competition called CodeChef SnackDown[7]
  • Codeforces Round – typically two hour contest, held every week
  • Facebook Hacker Cup – competition held from 2011, provided and sponsored by Facebook
  • HackerRank – multiple competitions[9]
  • Gridwars – four competitions held between 2003 and 2004.
  • Google Code Jam – competition held from 2003, provided and sponsored by Google
  • IEEEXtreme Programming Competition[10] – annual competition for IEEE Student Members held since 2006 by IEEE.
  • Topcoder Open (TCO) – Algorithm competition held since 2001 by Topcoder

In most of the above competitions, since the number of contestants is quite large, competitions are usually organized in several rounds. They usually require online participation in all rounds except the last, which requires onsite participation. A special exception to this is IEEEXtreme, which is a yearly 24-hour virtual programming competition. The top performers at IOI and ICPC receive gold, silver and bronze medals while in the other contests, cash prizes are awarded to the top finishers. Also hitting the top places in the score tables of such competitions may attract interest of recruiters from software and Internet companies.

Long-term

HackerRank Week of Code ICFP Programming Contest – annual 3-day competition held since 1998 by the International Conference on Functional Programming Topcoder Marathon Matches Codechef Long Challenges - held every month - lasts up to 10 days

Artificial intelligence and machine learning

Kaggle – machine learning competitions. CodeCup – board game AI competition held annually since 2003. Game rules get published in September and the final tournament is held in January. Google AI Challenge – bi-annual competitions for students that ran 2009 to 2011 Halite – An AI programming challenge sponsored by Two Sigma, Cornell Tech,and Google Russian AI Cup open artificial intelligence programming contest

Benefits and criticism

Participation in programming contests may increase student enthusiasm for computer science studies. The skills acquired in ICPC-like programming contests also improve career prospects, as they help to pass the "technical interviews", which often require candidates to solve complex programming and algorithmic problems on the spot.

There has also been criticism of competitive programming, particularly from professional software developers.[31] One critical point is that many fast-paced programming contests teach competitors bad programming habits and code style (like unnecessary use of macros, lack of OOP abstraction and comments, use of short variable names, etc.).[32][31] Also, by offering only small algorithmic puzzles with relatively short solutions, programming contests like ICPC and IOI don't necessarily teach good software engineering skills and practices, as real software projects typically have many thousands of lines of code and are developed by large teams over long periods of time.[31] Peter Norvig stated that based on the available data, being a winner of programming contests correlated negatively with a programmer's performance at their job at Google (even though contest winners had higher chances of getting hired).[33] Norvig later stated that this correlation was observed on a small data set, but that it could not be confirmed after examining a larger data set [34][unreliable source?]

Yet another sentiment is that rather than "wasting" their time on excessive competing by solving problems with known solutions, high-profile programmers should rather invest their time in solving real-world problems.[31]

Releases

No releases published

Packages

No packages published

Languages