To me, they are more "problem solving contests" than programming contests. The code is just there to validate the solution.
To me, they are more "problem solving contests" than programming contests. The code is just there to validate the solution.
EDIT: Also, maybe more importantly, I never feel more tempted to give up than when I know I've solved the basic problem but some environmental factor prevents the solution from being usable. The fun part is over, and if I want to make progress I have to dive into docs and other people's source code, and write good tests. I think there's more difference between someone who gives up at that stage and someone who doesn't than there is between someone who knows a particular algorithm and someone who doesn't.
Both parts (figuring and writing) are figuring out, but both are entirely different from programming challenges. First requires you to be able to decipher someone elses code reliably and fast. Second requires you to figure out how to do things as little fragile as possible.
Algorithms are more about solving isolated more math-like problems. Once you got solution, you do not need to consider anything then making it work, so it is different kind of code. Even if you would plug in it into some large system, it is would be isolated so you can actually afford to be more dirty.
That's usually the difficult part of any programming effort. Well, the hard part is usually getting a clear and correct set of requirements specifying the problem and constraints, but once that is done...