I've just returned from Vinnica, where complex olympiad in mathematics, physics and informatics was held. I was working in mathematical jury, but it was also interesting to observe the «informatical part» of olympiad. There was two competitions: individual and command one.
What I dislike about those competitions (but as far as I understood, this is common, at least for Ukraine):
- There's a strong limitation on language: it's either Pascal (Borland or Free Pascal) or C/C++ (Borland C or GNU C++). I don't think that many pupils know other languages, but on the other hand this discourages pupils to learn other languages. Otherwise pupils would certainly get interested in languages where you don't need to manage dynamically allocated memory or implement bignums by hand.
- There's a limitation on execution time of your solution. Yes, execution
time of your program compiled with some (unknown) compiler with some
(unknown) flags and run on some (unknown) hardware.
But ok, let's suppose that participant can roughly predict his execution time. How much time does he get? When one pupil asked jury, he got answer «twice the time of the author's solution». Unknown! And no, participants cannot even test their work until competition ends (to find out whether they satisfy the time limitations).
The best form of programming competitions I've ever seen is the one used in Project Euler.
It would be also interesting to hold the «programming tournament» in the form similar to physics tournament. What can be discussed is mathematical proof of correctness, O-big asymptotics, optimizations etc.