Click click click. Fingers tapping over the keyboard quickly, urgently. Papers rustling as words are looked up. The occasional exclamation of frustration or exultation as difficulties and successes are encountered.
For three hours, five high school students participated in the Canadian Computing Contest, sponsored by the University of Waterloo’s Center for Education in Mathematics and Computing. Although originally (and primarily) a Canadian contest, students from around the world participate in this contest every year. It give students a chance to try out their programming ability in a competitive environment and compare their skills with others.
Last year, ICS had one student participate in the contest. This year, we had five! We hope to have even more participate next year. It’s a good chance for our students to stretch the skills they learn in our programming classes and work in a pressurized situation.
For three hours on Wednesday, the students worked to produce working programs from scratch given a problem to solve and specifications to meet. Beimnet, Jan-Philipp, David, Feven and Yosias each had five programs to write. They were able to use printed materials for reference – no closed-book tests in programming! – but had to rely on their own creativity and computational thinking to frame the problems presented in a way that a computer could solve, and then code it in the language of their choice (all the students used Python this year) in a fully functioning program.
To give you the idea of what they had to do, here’s a sample question from a previous test:
Many communities now have "radar" signs that tell drivers what their speed is, in the hope that they will slow down. You will output a message for a "radar" sign. The message will display information to a driver based on his/her speed according to the following table:
km/h over the limit: fine
1 to 20: $100
21 to 30: $270
31 or above: $500
The user will be prompted to enter two integers. First the user will be prompted to enter the speed limit. Second, the user will be prompted to enter the recorded speed of the car.
If the driver is not speeding, the output should be: "Congratulations, you are within the speed limit!"
If the drive is speeding, the output should be: "You are speeding and your fine is $F" (where F is the amount of the fine as described in the table above.)
A reasonable challenge – realistic, but also simplistic for a contest environment. To deal with it, the student must break the problem down into logical statements, conditions, etc. They need to analyze all potential inputs and compare them. If the comparison is in one range, then a certain statement needs to be printed out. Depending on other comparisons, then different statements need to be printed out.
This type of analysis is called “computational thinking,” and it’s a good skill for all. It’s particularly useful for programming, but it’s also an excellent skill for scientific reasoning, mathematical analysis or almost all types of problem-solving.
Once the analysis has been done, the student must put it into formal computer code – something like this:
if speed <= limit then:
print ("Congratulations, you are within the speed limit!")
else if speed - limit <= 20 then:
print ("You are speeding and your fine is $100")
And so forth. It’s an exact process and can get quite complicated. This example is very simple – the challenges in the contest get more difficult! The students found some easy, others very difficult.
All of our contestants successfully completed the contest and earned respectable scores. More than that, all of them had the satisfaction of persevering at a difficult task, and the joy of building something from scratch to solve an assigned problem. It was a worthwhile experience …they’re already talking about taking the contest again next year!