Frequently Asked Questions
- What is the ACM Programming Contest?
Each year, the ACM (Association for Computing Machinery) sponsors an international programming contest similar to the International Math Olympiad, or the Putnam; but, for computer science. It attracts the best students from the best universities in the world, all trying to solve problems by writing computer programs. Locally chosen teams compete at a regional level for a chance to travel to the ACM's annual "World finals" conference and compete against the other top teams in the world. World finals competitors garner recognition as the best and brightest in the battle of the brains and gain international recognition by universities interested in offering scholarships, and companies interested in hiring superlative people.
For a Computer Science program of our size, we have had a number of successful teams - see the photographs outside the department office - and we'd love to have more. This year, the regional winners get an (mostly) all expenses paid trip to Sweden; "mostly" as ACM covers the food and accommodation, the department covers travel at its discretion. See http://en.wikipedia.org/wiki/ACM_International_Collegiate_Programming_Contest for more information.
- ACM Regional Competition, Local Programming Contest, Fall Competition, Spring Contest, World Finals...I'm confused?
And well you should be! It seems like there is a lot of highfalutin shenanigans going on here but it is much simpler than it sounds. First off, you will notice that the words "contest" and "competition" are used interchangeably. Secondly, the official ACM competition is a two-stage tournament, where selected teams from accredited universities from around the world gather at fall regional competitions to battle for an invitation to the world finals in the following spring. How teams are selected by the universities to attend the ACM regionals is left up to each institution.
In our case, we chose to select teams that will represent the University of Saskatchewan at the official regional competition through a local programming contest. The fall Local ACM Competition is this contest and is typically held in late September or early October. The teams selected out of this contest will enter the regional ACM competition held shortly afterwards at the end of October.
The regional ACM competitions are hosted by various institutions residing within their regions. The University of Saskatchewan is part of the Rocky Mountain Region and is proud to have hosted the last five regional competitions for our region here in the Department of Computer Science undergraduate laboratories.
Lastly, we have chosen to hold an additional Programming Contest each year in the spring (or close to it). This competition is not an ACM sanctioned or supported event. It is our way to preserve attention, momentum, and reward students with visibility to summer employment. Of course it is also fun and gives students further experience in Programing Competition environments.
- What is the format of these contests?
The regional and world finals competitions have only one level: extremely hard.
In order to build strength and interest of a variety of students, our local qualifying round as well as our spring contest contains two formal levels:
- Novice - open to any student who has not completed the core second year curriculum: 214, 270 and 280 (or equivalent for SIAST students), and
- Advanced - open to any student meeting the conditions to compete in the regionals. Regionals eligibility requires (among other things) that all competitors
- must be younger than 25 years of age,
- must have completed less than 5 years of higher education; some exceptions for internships are granted.
We also have a (becoming more formal) Open category where those who don't qualify for the above categories can test their mettle: they get the advanced questions and are scored on the advanced scoreboard, but do not qualify for prizes -- this is where faculty, staff, industry, and (most) graduate student teams will be placed.
Out of generosity and inclusiveness, we invite SIAST students to compete in the novice and advanced categories (based on their background), with the clear proviso that they cannot be nominated to represent the University of Saskatchewan.
- What do we do in the contest?
Each competition involves writing programs to solve approximately eight problems. Teams are ranked within their categories by number of correct solutions (programs), with ties resolved by fastest first. There is a straightforward calculation (for each problem) of time_for_problem_N := (time_of_correct_submission - start_time_of_competition) + 20*number_of_incorrect_submissions_for_problem_N that determines what fastest means.
For samples of questions used in these competitions see http://programmingcontest.usask.ca/?page=sampleproblems or Google for "ACM contest problems".
- Who can join the contest?
Any University of Saskatchewan or SIAST student; faculty, staff and others from industry may be accepted into the open category, subject to available space.
- I have no/little programming experience. Can I join?
YES. Whether you are a 4th year Computer Science major or a first year art student you are welcome to join the contest. Perhaps you have not done any programming but you are great at puzzles and problem solving. You can always join with or put together a team that includes a member with programming experience. The best teams typically consist of mixed disciplines: example: Physics student, Math student, Comp Sci student.
- I have or am taking a first year Comp Sci course. Do I have enough experience to join?
YES. You can join under the Novice category and we urge you to do so. Even if you are not sure you have the "necessary coding skills" it is great experience for future contests. We have had the full range of contestant teams ranging from a single person team currently taking their first Comp Sci course to a team consisting of "uber coding geeks." Sometimes the first team will solve 3 questions and sometimes the second team will solve 1, it all depends.
- Ok, but I feel that I'm too inexperienced for the contest. Should I wait a year or two?
NO. Don't delay any longer, register now, operators are standing by! We really do suggest and want you to register and come out and try even if you are unsure of your skills. First, it is fun. Second, it is great experience for the next contest. Third, no one is going to think less of you if you only solve 1 question or even 0 questions. Yes, we do have teams that come out and for a variety of reasons are unable to get a single question correct. But usually people get at least one and certainly they do better on subsequent contests because they know what to expect. Come out for the experience (and the pizza).
- Do we compete in teams or as individuals?
For the spring competition, teams comprise three members and are placed based upon the category that all team members satisfy. That is, one third year student makes the team advanced regardless of the other two members. We strongly recommend full teams and we will partner people as best we can on competition day: incomplete teams get no pro-rata just for being smaller.
For the fall competition, we try to match the format of the regional and world finals competitions. In 2008 this meant teams comprising of two members.
- Do I need a team to register?
NO. You can register and then make up a team or simply register by your self and we will try to put together a team with you on the contest day.
- What sort of programming is expected: well thought out and designed programs, or hack and slash?
There is only 1 criteria for the programs to meet: solve the given problem so as to generate the specified output. Typically the judges do not look at your source code (and probably wouldn't want to). Your solutions are judged to see if, when provided with a set of sample input, they generate the expected output specified in the question in a suitable amount of time. How that output is generated is completely up to you.
- What programming languages are allowed?
Currently the contest only allows C, C++, and Java. Although you can successfully use any of these during the contest some questions lend themselves better to a specific language. It is said that if you are a serious contender you will code in C, or C++. For the most part though the only place Java may fall short is if the solution requires significant processing time when handed a large data set for the imput.
We can't provide successful submissions, as we do not keep them. As well, problems will occasionally come from third-party sources, who do not want to have their solutions distributed.
If the summary from the contest day does not suffice, please contact Professor Chris Dutchyn to arrange for a time to discuss the solutions.
Thank you, Merlin! You rock!