Brush Up Your Programming Skill!
Today’s topic is about competitive programming and everything else related to code. I believe that a lot of people who have read my blog are actually coders, so this post will be quite related to your hobby and expertise.
In this post, I’ll try to elaborate several notable competitions that I have participated in the past years.
In Indonesia, there are several national / regional competitions in this category for university students which are held annually. Several of them are as the following:
1. ACM ICPC (International Collegiate Programming Contest)
ACM ICPC can be considered as one of the most prestigious programming contest for university student. From the formal announcement, the participants are composed from 2,000 universities in 80 countries around the world. In this contest, we are expected to create a team which consists of 3 members and 1 coach. The contest has 8–12 problems and each teams will have 5 hours to solve as many as possible and also as fast as possible. The scoreboard is sorted by number of solved problems and total time (as a tie-breaker). ICPC itself is a global competition where qualifications for the World Final (WF) are held in several designated regions. Fortunately, Jakarta is usually appointed as one of the designated city to arrange the regional contest, which is widely known as Regional Asia/Jakarta.
For Indonesian teams, we need to participate in INC (Indonesia National Contest) as the qualification stage for ICPC Regional Asia/Jakarta, which is hosted by Bina Nusantara University. In 2014, there are over 300 participating teams and the top 50 will advance to the ICPC Regional contest. INC is an online-formatted competition, where all participants can compete in the contest remotely. I had a memorable experience in this competition since I was abroad at the contest time. Yes, I’ve coded several solutions for INC 2014 in Kiyomizu temple — Kyoto (C’mon, don’t ask me why!). Well, you could say that I’ve got an “enlightenment” and my team succeeded in advancing to the regional contest :p
ICPC Regional is a competition between the top 50 teams from INC, a number of direct teams from other countries, and several top teams from other contests (Compfest, ICPC Provincial Qualification, etc). The term of “direct teams” means that these foreign teams can directly participate in ICPC Regional without a qualification prerequisite. However, the registration is quite pricey (around 120$). If I recall it correctly, there are around 75 teams in ICPC Jakarta 2014. The contest format is the same with INC, except this contest is an onsite one. Finally, One to three top-tier teams will get a chance to compete in World Final (the last WF is held in Morocco). The selection criteria is based on several aspects: (1) top rank, (2) best local team, (3) top team from the organizing university, and etc. In the last ICPC contest (Dec 5), this is quite funny since once again, I need to chase for my flight in order to attend AFA Singapore (Dec 6) less than 12 hours after the contest ended :v
INC is usually held in November, while ICPC Regional Jakarta is usually held in December. For further information, you can access the site here.
2. Gemastik (Pagelaran Mahasiswa Nasional Bidang TIK)
Gemastik is an annual competition which is sponsored by Direktorat Penelitian dan Pengabdian kepada Masyarakat (DP2M) DIKTI. In Gemastik, the competition is not limited to competitive programming since there are other competitions such as Data Mining, Network Security, etc. For your information, Gemastik VI in 2013 didn’t have competitive programming in its category. As far as I know, Gemastik VII and VIII (the upcoming one in UGM) will accommodate programming contest.
Programming contest in Gemastik usually has the same scoring format with ICPC. In the qualification phase of Gemastik VII, each teams will have 3 hours to solve 5 problems and the top 25 teams will advance to the final. As annoying as it is, the qualification of Gemastik VII was held in the same time with IEEE 24-hour Xtreme Programming 8.0 contest. So this qualification is the real life application of context switching, at least for me :p
Unfortunately, I cannot elaborate the final phase, since I was abroad during the final of Gemastik VII; And there’s no programming competition in Gemastik VI. I’m sorry, my teammate who have tried their best in the final :’) Anyway, the top 3 teams will receive money as the prize.
Gemastik V and VI are hosted by ITB, while Gemastik VI and VIII are hosted by UGM. It seems that the rule is subject to change, depending on the host’s university. For your information, the onsite competition of Gemastik is usually held between October to November. The official site for the upcoming one can be accessed here.
Compfest is organized by Universitas Indonesia with several competition categories: Competitive Programming, IoT, Business-IT case, etc. The competition format is almost the same with Gemastik, so I don’t think I need to explain it here :) The top 20–25 teams will compete in the onsite final. Furthermore, the top 3 winners will receive money as the prize and the top 5 winners will get a direct advance to ICPC Regional Asia/Jakarta.
The final stage of Compfest UI is usually held between September to October. Please check the details out here.
In addition to national/regional contests, several giant companies and associations have their own prestigious competitions. I will try to write ones that I know here.
1. Google CodeJam
Perhaps the most prominent one, Google CodeJam has been held regularly for the past 7 years. In 2015, the qualification round had more than 22,000 participants, ranged from students up to professional engineers. In Google CodeJam, you are allowed to use any kind of programming languages and techniques in solving their problems. You will be given an input file and you need to upload the correct output based on problem descriptions. There are usually two kinds of input: small input and large input. The small input has an easier constraints and you may try to solve it for unlimited times with 4 minutes penalty for non-accepted solution. You are given 4 minutes to download the small input file, generate the correct solution, and upload it to the grader. In contrast, large input is usually harder to solve and you are allowed to upload your solution once (after solving the small one). You have 8 minutes to solve the large input after downloading the input file. The maximum score for each contests is usually 100 points. The scoreboard is sorted based on the total score, followed by the last successful submission time (+ time penalty from all accepted solutions).
In the qualification round, Google will set a cut-off limit based on the total score. The contest will be held for the entire ~24 hours and you need to have a minimum score 20 out of 100 to qualify for the next round. In 2015, there are more than 12,000 participants who are successfully advanced to the next round. Round 1 is usually consisted of three parts: 1A, 1B, and 1C. The contest duration is 2 hours and 30 minutes and the top 1,000 participants from each round will advance to Round 2. To sum it up, there will be a total of 3,000 participants for Round 2. The actual fun starts here: the top 1,000 participants from Round 2 will receive the exclusive T-Shirt of Google CodeJam and the top 500 participants will advance to Round 3. Well, I’ve never been advanced to Round 3, but as far as I know, the top 25 participants from Round 3 will advance to the onsite final at Google Headquarters (all expenses are paid by Google). In 2015, the first rank will receive $15,000 as the main prize.
Google CodeJam 2015 offers a new track of competition: Distributed Code Jam for all people who are qualified to Round 3. The details can be accessed here.
2. Facebook Hacker Cup
As the name suggested, Facebook Hacker Cup is an annual event which is arranged by Facebook. One of the main difference from Facebook Hacker Cup, compared to other contests, is that you are allowed to submit your solution once and all of your solutions will be graded at the end of the contest. Strictly speaking, bad luck is more troublesome here :p
The number of participants in Hacker Cup is around 9,000 people. The qualification round (72 hours) consists of 3 problems and you need to solve one of them in order to advance to the next round. The first round (24 hours) will have 3–5 problems and the cut-off is based on the rank 500 total score. For your reference, there are 700 people who are advanced in the last Hacker Cup based on this rule. Hacker Cup also offers an exclusive T-Shirt for top ~550 participants in Round 2. In addition, the top 100 performers will compete in Round 3. Almost the same with Google CodeJam, the top 25 in Round 3 will advance to the onsite final at Facebook Headquarters. The first winner will receive $10,000 as the main prize. Personally, I’ve never succeeded in achieving the exclusive T-Shirt :’) Anyway, you can read it from Facebook Hacker Cup FAQ here.
3. IEEE Xtreme Programming (for university students)
As a preliminary, it is required to become an IEEE member in order to participate in IEEE Xtreme Programming. The contest is designed for university students from all around the world. Teams in Xtreme Programming are comprised of up to 3 IEEE students and 1 proctor (coach). The most unique characteristic of this competition is its 24-hour duration contest. The scoring criteria is quite complex, so I will not explain the mechanism here. The top 100 teams will receive IEEE special merchandise and the first winner will receive an expenses-paid trip to an IEEE conference of their choice. I forgot the details but there are also additional prizes for rank 2 to 10.
From my personal experience, the contest is fun since you will do it altogether with other teams in your campus for the entire 24 hours. At least in my university (Institut Teknologi Bandung), there are unlimited food supplies, huzzah! In IEEE Xtreme Programming 8.0, there are 5 teams who participated from my university and there are more than 1,800 teams from all around the world. Of course, code plagiarism among different teams is not allowed. Fortunately, all of the 5 teams from my university successfully placed in the top 100 ranks, yeah!
To boost our programming skills, several platforms are created to facilitate these kind of competitions. They have their own regular contests and you could solve past problems in their archives.
Topcoder is an online competition platform with a broad range of categories: Programming, Data Science, Software Development, Design, etc. In addition, Topcoder offers a variety of prizes for the winner: money, T-Shirt, and job offers. In a month, Topcoder usually has 2–4 programming contest which is widely known as Single Round Match (SRM). Topcoder has an annual event known as Topcoder Open (TCO) and you may access the details here.
Codeforces is a similar competition platform which is created by Mike Mirzayanov in 2010. The headquarter is located at Russia, so there are quite a lot of competitions which are held in Russian. Fortunately, there are also several competitions from other companies which are held in this platform (Rockethon, MemSQL Cup, and others). Codeforces has a customized groups which allow us to create a private group and arrange an internal contest based on our own problem selections. You could compose your own problem in their Polygon system. In addition, there are a number of regular contests which are divided into two divisions (Div 1: rating 1,700 or up; Div 2: the rest of participants).
Codechef is a global programming community which is created by Directi (located at India). In Codechef, they have several monthly regular contests which are known as Long Challenge (10 days), Lunchtime (3 hours), and Cook-off (2 hours 30 minutes). There are also a lot of external contests which are hosted by other Indian companies and institutes. In 2015, they held a global challenge known as “Codechef Snackdown 2015”, where there are over 8,000 teams (1–2 people) participating in the contest. Round 1 consists of three parts and the top 500 teams from each parts will advance to the Online Elimination Round. The total of 1500 teams will compete in order to advance to the final (Top 25 Indians and Top 25 from the rest of the world). In addition, the top 500 teams will receive SnackDown Merchandise. Fortunately, my team is lucky enough to stand at the top 500 ranks, yeay :D On the side note, the first winner from worldwide category will receive Macbook Pro, while the first winner from India will receive 3 Lakhs + Job offer from Directi.
HackerRank is one of the newest platform which is launched in 2012. Its headquarter is located at the Mountain View, USA and it can be considered as one of the fastest growing platform in the Internet <(“) Needless to say, there are a lot of competitions in HackerRank and you can read the details here. Personally, I love to use HackerRank in creating a hosted internal contest since the platform is quite easy to use and it has a broad range of customization for the contest.
This post has become a quite lengthy post. Nevertheless, I hope this post can motivate all of the readers and help you in polishing your programming skill. I’ve also put an additional references section in the end of this post, and feel free to share information with me if you have a good resources in this matter (competition references, etc)!
These references are ones that I have tried beforehand and I love to use it :p
Originally published at freedomofkeima.com (May 8, 2015).