models.py contains the python classes representing the objects and the code to parse the input file
The attempt*.py are each of our approaches for solving the problem. We took an iterative approach, aiming simply to get on the scoreboard first and then progressively improving each attempt.
Initially, we focussed on parsing the file but putting it into classes that had as many useful utility functions that would simplify the solving of and reading of the solution code.
The enemy is complexity - Nick worked on approaches to solving the problem whilst I coded. This allowed him to memorise the problem and me to memorise the code structure and work out how to translate ideas to code. It's much harder for one person to do both at the same time, as the code gets complex and the problem is complex.
Last year we all tried coding and it didn't work too well - we both felt it worked better this year having one focus on the problem and one on the code. Our final position was ~760 which sounds abysmal but is actually comfortably in the top 30%.