RossJamieson.com


Computer Science Contests

What's the benefit of writing contests?
a. The biggest benefit is actually from practising. By attempting to solve more and more problems, you increase:
i. Your understanding of the language
ii. Your ability to problem solve
iii. Your speed
iv. Your confidence
b. These will all help in computer science classes too, not to mention that problem solving and confidence are transferrable
c. If you do well on a contest, it's something that can go on your university applications. If you don't do well, then you don't need to mention it, and it won't hurt your application.

Where can I practice?
a. To practice, I suggest you sign up for a website with many practice problems, such as:
--- Don Mills Online Judge
--- Sphere Online Judge
--- Project Euler
--- Codeforces
b. I like DMOJ because you can sort by "points", which gives a good indication of the difficulty of the problem.
c. SPOJ also lets you sort by difficulty
d. In other websites, the best way to start with easier problems is to sort by number of people who solved it, and start with the ones solved by many people

What should I practice?
a. "easy" problems are ones where you immediately know how to code a solution and can do it without any difficulty
This is not a great stage to practice, since it's too easy

b. The next stage of difficulty is a problem where you can think of an algorithm, and coding it takes some work, but you can do it without learning totally new things
i. This is a great stage to do lots and lots of practice, because you will develop what you know, and future problems that would have been in this category are now "easy" for you
ii. This means that when you write a real contest, you'll be able to do the easier questions in less time, giving you more time for the hardest stuff
iii. (Or when you write a test in class)

c. Sometimes the solution requires algorithms you haven't heard of before, or features of a language
i. This is where you start learning more brand new stuff
ii. More features will also come in higher-level courses
iii. More algorithms will come in upper-year university, but you can get ahead of the curve by learning some (one at a time!) and practising problems that use it

d. Another way you can learn more is by reading a solution for a question that you couldn't get an algorithm for, then implement (code) the solution
Try not to copy; instead, try to understand it, and then recreate it, one section at a time

So what contests are there?
a. The #1 contest we promote is the Canadian Computing Competition, run by the University of Waterloo
b. Websites like DMOJ and Codeforces run their own contests, and run contests for other organizations
c. ECOO is another high school contest (with limited enrolment)
d. Some Toronto high schools run contests