The course will be organized this year 100% online! You can take part in all course activities remotely. The meeting times announced here in MyCourses still hold, but everything is arranged online; please see below for the details. If you are interested in taking part in the course, please register in Oodi as usual, join our Slack workspace, and follow instructions there!
This is a practical hands-on course that is intended for students who are interested in competitive programming and algorithmic challenges. During this course, you will learn how to solve algorithmic programming challenges, both individually and as a team.
Students are expected to have a working knowledge of computer programming, algorithms, and data structures, and preferably some practical experience with C or C++ programming languages. There is a prerequisite test that you will need to solve before the first meeting (see below).
We will meet online every Saturday at noon. The practical arrangements vary from week to week, but a typical meeting program looks like this:
- 12:15pm–1:00pm: short lecture.
- 1:00pm–4:00pm: mini-contest.
- 4:00pm–4:45pm: post-contest wrap-up, discussion.
In the lecture we will introduce e.g. broadly-applicable algorithm design techniques and programming techniques. The mini-contest will then contain some problems that are related to the topic of the lecture, and they give you an opportunity to immediately apply what you have learned, but there will also be always some problems that are unrelated to the lecture and that will require some creative thinking.
During the first hour of the mini-contest, you are expected to work on your own, but after the first hour you can get some help from the course staff if you are not making progress with the problems. Once the mini-contest is over, we will then discuss problems and solution ideas together.
We practice problem-solving both as individuals and in small teams. During the course, you will also take part in NCPC, the Nordic Collegiate Programming Contest (which will also be organized online this year).
We will refer to some parts of the Competitive Programmer's Handbook by Antti Laaksonen. Additional material will be posted on Slack.
Course registration is via Oodi as usual. Once you have registered for the course, please do the following before the first meeting:
- Join the Slack chat, using your Aalto email address: https://aaltocontests.slack.com/
- Create a user account in CSES if you do not have one yet: https://cses.fi/register
- Solve the prerequisite test (see below)
To make our life easier, we suggest that you set your real name correctly in your Slack profile and CSES profile. However, if you wish to remain anonymous on Slack and/or CSES, it is also possible — you can simply pick a random nickname and leave your real name unspecified.
You will need to solve the following prerequisite test on CSES: https://cses.fi/338/list/
The test is a mini-contest that consists of two tasks. Task A is a trivial task that helps you to learn how to use CSES and how to submit solutions. Task B is a small algorithmic puzzle that will require a little bit of creative thinking. You are free to use C++, Java, or Python in this contest.
The deadline for solving both tasks is before the first meeting of the course. If you need any help with the prerequisite test (especially if it is a technical problem related to the use of CSES), please feel free to ask on Slack!
The grading is pass/fail.
You will get 2 credits by taking successfully part in at least 5 meetings during period I. Any of the following counts as a successful participation:
- You solve at least 2 problems during the meeting.
- You solve at least 1 problem during the meeting and at least 2 additional problems during the following week.
NCPC counts as one meeting.
It is possible to get more credits if you continue during period II or participate in the NWERC contest or other programming contests during the autumn. If you are interested in the extended version (3–5 credits) of this course, please contact the course staff well in advance.