Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Beating the odds: winning programming contests

Beating the odds: winning programming contests

A presentation I gave to a Year 12 software programming class during my student teaching at Lynfield College.

Chris Jester-Young

September 17, 2004
Tweet

More Decks by Chris Jester-Young

Other Decks in Programming

Transcript

  1. What are you on about?  There are two well-known

    programming contests at tertiary level:  ACM International Collegiate Programming Contest: http://www.sppcontest.org/  New Zealand Programming Contest: http://www.nzpc.otago.ac.nz/  Contestants enter as teams of three.  Solve as many problems as possible in five hours.
  2. So, you wanna win?  So did we!  

    Our team was: Bradley, Edward, and me.  We entered both contests in 1997–1999.  Nationally, we got in the top three places for all NZPC contests, and ACM for all but one.  So you can win. But it won’t happen willy-nilly.  Two types of strategies are essential:  Programming strategies  Teamwork strategies
  3. Programming strategies  Many people obsess excessively over choice of

    programming language.  The specific language is unimportant as long as all members are fluent in the one chosen.  More important to understand the problems and the methods required to solve them.  Thus, it’s important to know a good range of solution methods, and for all team members to become familiar with them.
  4. Some methods we liked  Dynamic programming, with pre-computation in

    extreme cases.  Contest submissions have performance and size requirements.  This method provides a space-time trade-off.  Textual parsing using state machines.  Excellent flexibility for most parsing work.  Many programmers fear this method.  My solution: practice, practice, practice!
  5. Code library  When there is a contest problem we

    couldn’t solve, we review the problem at a later date.  We usually end up writing code to solve the problem. If it’s really good, we print it to use for future contests.  Bringing good, tested code to contests has saved us a lot of time.  If nothing else, make a compact yet fast bignum library, if your platform lacks one.
  6. It’s all about teamwork  The whole is greater than

    the sum of its parts.  Choice of team members is very important.  They need to work well together:  Understand each other’s approaches  Share a common jargon  Agree on acceptable practices   Have a common vision  Choice of team captain is equally important.
  7. The team captain  Team captains manage their teams. They

    make all the essential decisions about the team:  When and what to practise  What to bring to the contest  How long to spend on which problems  How members need to perform to stay in   Need to be highly respected (both technically and socially) by all team members.
  8. Before the contest  Practice is essential:  Work on

    previous problems to become familiar with required solution methods  Develop scheduling strategies: how long to spend on which types of problems  Resources are essential too:  Sort out which books to take to the contest  Prepare all required code libraries  Decide on transportation arrangements
  9. During the contest  There is only one computer, and

    only five hours, so computing time has to be rationed.  The team captain must be prepared to be despotic about enforcing this.  Our team has a strict 30-minute policy. If you don’t complete your problem by then, you get off the computer. No exceptions.  There isn’t enough time to solve all the problems. Decide which ones to attempt, in which order, and who to try which.
  10. The coder  During your time on the computer, you

    need to have your design drafted to a stage where you can just key it in with little thinking.  Usually this means pseudocode is required.  In the name of expediency, be prepared to throw all the “structured” coding rules to the wind.  Your code is likely to be the ugliest (yet still debuggable) piece of turd in the world.
  11. Sideliners are the busiest people  When you’re not on

    the computer, you don’t twiddle your thumbs.  You either work with the other offline person to draft out the design for the next problem, or help the online person debug their code.  It is thus important for every team member to understand everyone else’s designs.  No member works on a problem alone, except for extremely trivial ones.
  12. It’s all about winning  The strategies I covered worked

    for our team. They may work for you too.  Part of our team’s success comes from our attitude: we’re there to win, not just to have fun. We worked hard to achieve this.  If the team has an effective captain with clear direction, and its members are competent and work together well, the chances of winning are excellent.