Since you did not give the models a chance to test their code and correct any mistakes, I think a more accurate comparison would be if you compared them against you submitting answers without testing (or even running!) your code first
Once we use tools to easily iterate on code (e.g. generate, compile, test, use outcome to refine prompt) we will turbocharge LLMs coding abilities.
When it couldn't solve it within the constraints, was it 'broadly correct' with some bugs? Was it on the right track or completely off?
Glancing through the code for some of the 'easier' problems Claude (his best performer), it seems to have broadly correct (if a little strange and overwrought) code.
But my phone is not a good platform for me to do this kind of reading.
It's a reasonable test.