Distributed Computing
ETH Zurich

CodeJam Laboratory (FS 2023)

In this lab you will practice writing computer programs in a fun competitive environment. The problem statements tell a short story, describe a puzzle, and clearly define input and output. Your short program must compute the solution in a few seconds. Many programming contests such as the International Olympiad in Informatics, the International Collegiate Programming Contest or Facebook Hacker Cup exist, but in this lab we focus on the Google CodeJam series. Besides being fun, CodeJam is a great way to improve your programming and problem solving skills. CodeJam-like problems are also used frequently in interviews for software developer positions.

We will use current and past problems from Google CodeJam. Please register with CodeJam before attending the lab. You may use any of the 30+ programming language supported by CodeJam, but we recommend C++ or Python that you may know from ITET lectures.

In the first two afternoon sessions we will look at two prior qualifying rounds, and discuss some valuable techniques and tricks. Then you will try to qualify in the actual CodeJam qualification round! The qualification round is relatively easy, and we hope that everybody who tries should make it. After you qualify, we continue with up to 3 more Round 1 competitions. You can participate in the actual competition, and we have a lab session after each competition to help you with the problems you did not solve. In order to get the lab credits, you either need to achieve enough points during the competition or show suffient effort during the lab. Qualifying for Round 2 is quite difficult. If you manage to qualify, you get a chocolate.

Lab time: Thursday 14:00-18:00 (see dates below), ETZ D96-1

Lab language: German or English

Lab organization: Robin Fritsch, Andrei Constantinescu, Lab supervision: Richard Danis, Noah Pfenniger

Lab registration: Link If you have missed the deadline or want to unregister, please contact the lab supervisors (Richard Danis, Noah Pfenniger).

Passing requirements: For each lab, you need to reach a certain number of points. You can solve the problems during lab time with help of the supervisors. If you have solved the problems before the lab (e.g. during the competition), you can simply show the supervisors your solutions.

Online submission: If you cannot attend a lab, you can submit online by uploading a screenshot of the codejam submission portal showing the points archived as well as part of your code (example) to the following polybox: https://www.polybox.ethz.ch/index.php/s/FhkMONritRT2LiP. Please use the format <kürzel|name>_<labnumber>_<exercise-name>.jpg for your submissions. Online submissions should be made before the end of the lab (18:00 on the day of lab).

Rules: You may use any resources you find online and work together with your colleagues. However, everyone must write their own programs. Do not copy other people's code! For problems from past rounds, CodeJam provides an "Analysis" that describes how the problem can be solved. We strongly recommend that you first try to come up with your own solution before using this.



Lab Competition Date Lab Date Passing Requirement
Training 1 no competition* 02.03.2023 40 points
Training 2 no competition* 16.03.2023 40 points
Training 3 no competition* 30.03.2023 40 points
Farewell Round A 15.04.2023 16:00-20:00 20.04.2023 60 points
Competition 1 during lab 27.04.2023 in person participation
Competition 2 during lab 04.05.2023 in person participation

*These are the qualification rounds from previous years.

Further Resources: If this lab has sparked your interest in competitive programming, you may also want to take a look at ACM VIS and the Google Developer Student Club at ETH. Additionally, you can find regular competitions and lots of practice problems on Codeforces.