When you are starting out with programming contests, you may not be familiar with the most popular sites and tools available to help you hone your craft. These posts will help you out with this, sharing the most popular and useful tools for competitive programming.
Here are the best sites that host competitive programming contests, and provide contest platforms to practice old problems.
It is a Russian site, that provides high-quality contests with the highest frequency, sometimes up to twice a week. It features a blog system where you can ask questions and a practice problem set, which you can sort through with tags. It also has virtual contest support, and the ability to create groups to organize private contests.
It is a US-operated site, that hosts 1.5-hour SRM's (Single Round Matches). Topcoder also organizes the annual Topcoder Open tournament. It also hosts the TopCoder data science tutorials, a list of tutorials written by respected Topcoder members. One of the features that separate it from other sites is a separate challenge phase after contests.
HackerRank is a technology company currently based in the US, that focuses on competitive programming challenges. It hosts HourRanks, CodeSprints, 101 Hacks, and Week Of Code contests on a monthly basis. It has learning tracks for various CS topics and programming languages.
It is an Indian site, that hosts 3 contests monthly, the Long Challenge (10-day challenge), and the shorter Cook-Off and Lunchtime Challenges. The Long Challenge is one of the best starting points for a beginner programmer, as it allows you to learn new concepts to solve problems competitively. It also organizes an annual flagship coding competition, the CodeChef SnackDown.
HackerEarth is also an Indian company focusing on competitive programming and hiring challenges. It conducts the monthly Circuits, which are 9 day long challenges, as well as shorter challenges (HourStorms). It also hosts competitions conducted by various colleges around India.
A problem archive organized by Coding Blocks, it hosts a large number of problems categorized by type. You can join contests with leaderboards, and race your way to the top. The practice section also contains innumerable problems categorized by type. You can also join its classroom or online courses, and get access to a community to help you when you get stuck with personalized support.
It is also a relatively new site that hosts regular 2-hour programming contests. It also supports virtual contest participation, and its interface involves features like a graph editor, geometry tool, and a difference checker tool.
AtCoder is a Japanese programming contest site for anyone from beginners to experts. They hold weekly programming contests, of various difficulty levels (Beginner, Regular and Grand contests).
Online Judges / Problem Archives:
These are some online judges with large problem archives, that you can use to practice topics as you learn when you are not doing contests.
Contains thousands of problems, organized by tags. The list of classical problems, sorted by users who have solved, is the most popularly suggested learning route for beginner programmers. It also has a discussion forum.
It is the largest Russian archive of programming problems with an automatic judging system. Problems are mostly collected from regional contests. It has problems classified by type, as well as the regionals they appeared in.
A problem archive with over 3500 programming problems. It is popularly used in accompaniment with the Competitive Programming 3 textbook by Steven and Felix Halim. uHunt and UVaToolkit are some related tools.
A problem archive with thousands of problems, which can be sorted by category. This is useful when you study a new concept and want to practice problems related to it. It also features the Codeforces ladders, where you can join a ladder based on your CodeForces rating, and solve problems that suit your current skill level.
Project Euler Archives
A series of challenging mathematical/computer programming problems, that become increasingly difficult as you proceed down the list. Great for brushing up your math skills.
Google CodeJam Archives
Archives of the problems from the previous year's Google CodeJams.
ACM ICPC Problem Archives
Archives of the problems from the previous years ACM-ICPC regionals and world finals.
Tools for Programming Contests
There are various tools you can use in programming contests, that can be helpful in shedding light on a problem, or even debugging a problem. It might even help you the next time you have a hardware/software issue on your PC during a contest.
Ideone - Most commonly used for testing and sharing code. You can make an account and save your programs. It does not show the execution time of the program though.
Rextester / Codeforces / CodeChef IDE - Shows the execution time of the programs. On Rextester, you can create an execution command for the program.
Coding Blocks IDE - In addition to the IDE with code completion, you can also create an account to save your code on the server, and also share it with others. It is specifically designed for competitive programming, with themes and common shortcuts.
CSAcademy IDE - In addition to other features, it has workspaces so you can work on multiple files at once. Also, the IDE has a stderr stream, so you can use cerr<< debug statements in your code also.
HackerRank IDE - Although it is not a standalone online IDE, you can use the IDE on its problem pages. It has one advantage over others, it displays the gdb stack trace in case of runtime errors, so you can figure out exactly which line the segmentation error occurred.
In competitive programming, a common way to find a bug in an algorithm is to use stress testing, which involves generating a large set of random test cases and checking if a brute force algorithm and an efficient algorithm always agree with each other. Two tools that can be used for checking if two texts are exactly the same or not are - Diffchecker and CSAcademy Difftool.
OnlineGDB is an online compiler and debugger for various languages. It can be useful for debugging your code and unearthing hard-to-find errors.
If you wish to share your code for others to look at, it might be a good idea to format your code consistently so that others find it easier to read. You can find online code formatters for the same. Some code formatters for C++ are format.krzaq.cc, CodeBeautify formatter, and the TutorialsPoint formatter.
CSAcadmey's Graph Editor and Geometry Widget are examples of tools that can help you solve problems that are hard to visualize properly.
VisuAlgo is a website perfect for people trying to get an intuitive feel for algorithms. It features animations for most common data structures and algorithms.
Algorithm Visualizer is another website to visualize algorithms, data structures, and the operations we can do on those data structures.