The buzzword nowadays is Competitive Programming. In the last article, we described how anyone could start their journey in competitive programming.
Do check that before you move forward with this article. Well, in this article, we will be making it simpler to achieve that level of confidence in you in the world of competitive programming.
We have listed the best resources you need to excel in the competitive programming arena. Don’t worry; most of them are free resources, and we will just be organizing them to get you started.
Applying for TCS Codevita 2021? Here are the things you should keep in mind.
Let’s kickstart with a language:
- If you are a student, you must have a lot of time to explore various languages and the ones that will suit you. If you are comfortable with Java to get with it; if Python, C++, anything just starts with it.
- For beginners, I feel Python is easier to learn, although C++ is slightly better in coding. Anyway, it’s up to you in which language you want to get comfortable with.
- Deep dive into the language; like studying some popular libraries like STL (Standard Template Library) in C++.
Once you have chosen your language, get started with data structures. These will help you navigate your thoughts to implement a code.
Start with the simpler ones like:
- Array, List, LinkedList, Stack, Queue, Priority queue, Tree, Hash Map, etc.
- Start playing around with these, implement some solutions using these.
Following are the links necessary for beginner’s data structures:
- Arrays – https://www.geeksforgeeks.org/introduction-to-arrays/
- Linked List – https://www.geeksforgeeks.org/data-structures/linked-list/
- Stack – https://www.geeksforgeeks.org/stack-data-structure/
- Queue – https://www.geeksforgeeks.org/queue-data-structure/
- Strings – https://www.tutorialspoint.com/cplusplus/cpp_strings.htm
- Tree (Not much essential for beginners) – https://www.geeksforgeeks.org/binary-tree-data-structure/
- Solve and practice at least 40-50 questions from these sites clearing out the implementations’ fundamentals.
- Along with this, start learning about the time complexities of your code. It will help you analyse your code much better.
Well, to be honest, this is the most vital part of competitive programming. Algorithms are your way to the top of the leader board. It decides how fast and efficient is your code than others. Initially, you might feel difficult to comprehend but be patient; gradually, you will be designing your algorithms once you have profound conceptual depth.
Start with the below-mentioned ones:
- Maths for Competitive Programming Beginners: As most beginners’ contests nowadays have many maths-related problems.
- Euclid’s Algorithm
- Prime Number
- Greedy Algorithms
- Sorting Algorithms, specifically Quick Sort, Merge Sort, Heap Sort, Insertion Sort, along with their time and space complexities
- Binary Search
- Dynamic Programming (a bit advanced topic)
A good practice I recommend is to analyse your code’s time complexity and insert in the code as a comment whenever you have solved a problem. This will also help you to search for efficient solutions and analysing your algorithms.
Getting to know about various contests:
- CodeStudio by Coding Ninjas: It is a place for aspiring and experienced programmers to prepare for tech interviews, practice problems, compete in challenges, discuss and stay up to date with the latest developments in the tech world. You can solve problems on many topics like data structures, programming fundamentals, recursion and backtracking, and many more. You can read curated interview experiences of top bigwigs to crack your next interview.
- Top Coder: I recommend this platform for international exposure along with the higher difficulty of problems. It also organises TCO open community competition where competitive programmers from around the world participate. TopCoder is one of the first online competition programming platforms. It includes a list of previous algorithmic challenges that you can complete independently using their code editor directly online. Single Round Matches are held a few times a month at a set time where you compete against others to solve problems the fastest and with the highest score.
- HackerRank: You can get a lot of beginner editorials and solve organised problems one after another. You can also get many companies which are hiring from here. Algorithms, Mathematics, SQL, Functional Programming, AI, and other domains are among the challenges offered by HackerRank. You can complete all of the challenges online (check out this example). Every challenge has a debate and leaderboard, and most challenges have an editorial that explains more about the challenge and how to approach it and come up with a solution.
- Codechef: This is a good site for regular contests. Codechef generally has three contests that run along a month; the first one is a long challenge where, in a window of 10 days, you have to solve 8-10 questions.
It gives ample time to research a problem and come up with a solution. It also helps in concept building. I would personally recommend you to start with long challenges.
Annual Smackdown is an exciting competition from this organisation. Then comes the cook-offs, a time-restricted contest where you compete with coders worldwide and earn ladders and CodeChef goodies for the achievers.
Another such contest organised is Lunchtime having the same concept; it tests your speed and problem-solving abilities.
- Codeforces: This site is quite similar to Codechef, although here, you can expect more exposure to worldwide participants as people from around the world participate in a contest organised by Codeforces.
Also, the fantastic thing about Codeforces is that they also publish official editorials for learning purposes. Here contests are divided into three divisions according to the ratings, so when you rank higher in the leader board, your ratings improve.
Although as a beginner, do not worry about ratings. Focus more on understanding and coming up with a solution first; later, you can optimise your solution.
- LeetCode: This is one of the top technical websites for coders to crack interviews. There are many challenges for preparing for the interviews of companies like Google, Apple, Amazon, Adobe etc. This website has challenges for beginners to expert programmers. The primary goal of this is to help people in getting jobs in top tech companies. Keeping this in mind, they keep on hosting coding contests every week. People can participate in these contests and set their ranking. To top it all, you can also give mock interviews for various big companies.
- SPOJ (Sphere Online Judge): It has an online judge system. It has a lot of coding challenges on various topics. There are beginner-level as well as advanced-level coding challenges. SPOJ has a welcoming group that will assist you with coding issues. You can begin by solving problems with the highest possible submission and then follow or check the submissions of other good coders here. You can enter various into contests once you’ve solved 50-70 problems and gained some confidence. On its website, SPOJ also has a discussion page.
- Project Euler: It is an excellent site for challenging mathematical problems. You’ll be writing computer programs to solve any mathematical equations or formulas. There is also a forum dedicated to each issue. After solving 25 problems, you advance to the next level. To see how it works, go to GeeksforGeeks Project Euler.
- HackerEarth: This website is also a technology startup based in India specialising in competitive programming and recruiting challenges. They have a developer community of over 2.5 million people. The platform supports over 35 coding languages, and you can practice problems on a variety of subjects, just like other platforms (Data Structures, Algorithms, Python, Machine Learning). The website presents thoughtful challenges that are most appropriate for professional programmers. They hold coding competitions and hackathons every month. Code Monk, their challenge, is very popular among programmers. HackerEarth’s leading companies include ThoughtWorks, Amazon, Accenture, Walmart Labs, IBM, and Intuit.
- Coderbyte: Beginner and intermediate programmers will benefit from Coderbyte. They have over 200 challenges available in a variety of programming languages. The site is helpful for work interviews, and the tasks vary from easy to challenging. If you have any issues, you can ask questions on Coderbyte and, more than likely, you will receive answers from their incredibly active group. You can equate your answers to the official solution offered by them and see what other users have come up with. They also have interview training and computer science fundamentals courses. Coderbyte’s top clients include Deloitte, PWC, HBO, and LogMeIn.
- Exercism.io: Exercism is a website that provides 3100+ coding challenges in 52 different programming languages. After deciding on a language to learn, you take on the coding challenges right on your machine (Exercism has its command-line interface that you can download from GitHub). However, it differs from other challenge websites in that you work with a mentor after each challenge is complete. Your responses will be reviewed online by the mentor, who will offer suggestions to help you improve them if necessary. You can unlock more challenges after your answers have been accepted and submitted.
- Codewars: Codewars has a vast number of coding challenges that are submitted and edited by the community. You can solve the problems in one of the several languages directly online in their editor. You can see a discussion as well as useful solutions for each challenge.
- CodinGame: Instead of simply solving coding challenges in an editor, CodinGame allows you to participate in writing the code for games that you can play directly online. The game includes a problem description, test cases, and an editor that allows you to write code in one of 20+ programming languages. Even though this website is not like other competitive programming websites like the ones listed above, it is still popular among programmers who enjoy solving problems and competing.
- Codility: You’ll be given several pre-customised and pre-thought challenges to complete in a variety of programming languages. They’re all sorted by difficulty level, and there are about 40-50 challenges to complete. Each has a thorough explanation of what the final program should do, and – as far as I can tell – each has a time limit, so there’s no slacking!
- Apart from these, we also have Google Code Jam, Hash Code, ACM-ICPC (kinda Olympics of Competitive Programming).
These competitions have lucrative prizes, along with enthusiasm to win these competitions already should make you excited enough, right?
Also, here goes the links:
- Google CodeJam: https://codingcompetitions.withgoogle.com/codejam
- Google Hash Code: https://codingcompetitions.withgoogle.com/hashcode/
- ACM-ICPC: https://icpc.global/
Basic Problems for Competitive Programming:
Planning to apply on ACM-ICPC 2021 here are few things you should be doing.
This link contains Atcoder DP contest which has all the fundamental dynamic algorithm problems as the base for learning dynamic programming.
BFS and DFS – Breadth-First Search and Depth First Search are essential algorithms based on stacks & queues. You will find their usage in quite a lot of other algorithms.
For further exciting problems, you can also follow my GitHub repository.
Frequently Asked Questions
To begin with Competitive Programming, you need to have a great foundation in data structures and algorithms in any language of your choice and mathematics.
Python is easy to write. The language and the logic of the code can be written in the minimum amount of steps, thereby saving time and energy; instead of worrying about the variables to store your data, your focus shifts to the most essential aspect of programming, the problem.
One of the best books for competitive programming is Introduction to Algorithms by Cormen, popularly known as CLRS.
To gain mastery in the field of competitive programming, you need to be consistent with your learning and practice. Learn every day and compete regularly; that should be the thumb rule to your success.
The main goal is to continue coding as a passion. I would not recommend continuing this just for the sake of getting an interview; if you genuinely enjoy programming, Competitive Programming will undoubtedly pique your interest.
I hope this provides you with a clear path to begin your Competitive coding journey and aids aspiring developers and programmers.
Do keep on following this for more resources on coding your way out. You can also check out our in-house practice platform, CodeStudio.
By Aniruddha Guin