In his day job, Jeremy is a fellow software architect on the Revit team, although to win this prestigious competition Jeremy clearly functions at a much higher order (yes, that was actually a functional programming joke, right there ;-).
To find out more about the task and Jeremy’s solution, watch this video (Jeremy’s team – Frictionless Bananas, of which Jeremy was captain and sole member – is introduced at around the 24m mark and talks about his implementation from about 29m30s):
To summarise this year’s task: to code the behaviour of a “robot” to play a 2D platform game called “Lambda Lifter” that seems to have been influenced by Boulder Dash (for the game-play) and Manic Miner (for the name). Jeremy’s solution used C++ – the choice of programming language was completely open and not limited to functional languages – and was the outright winner by a considerable margin.
This is a huge achievement – many congratulations, Jeremy! :-)
I asked Jeremy a few questions about the contest…
Where does your team’s name come from?
It came from a physics discussion about the force exerted by a marble rolling along the inside of a semicircular object. I referred to the object as a “frictionless banana,” which promptly ended the discussion due to laughter, but a team name was born.
How many times have you entered the ICFP Programming Contest?
I’ve participated on and off since 2001, submitting solutions in eight years and working on the task without ultimately submitting anything in several others.
Is this the first time your team has won?
I’ve placed in the contest twice before: second place in 2004 as part of a two person team and Judges’ Prize in 2011 for being the highest scoring single person team. This year was the first time in first place.
What was the toughest part of the challenge?
I often find that the contest is won more by finding a clever strategy than by programming per se, and this year was no different. Typical search techniques would have been too slow, requiring an exponentially growing amount of time to explore all possible sequences of moves. The biggest challenge was to find heuristics that could perform decently on a variety of maps in a reasonable amount of time.
How many hours do you estimate you spent during the long weekend of the competition?
As a guess I’ll say 36 hours total, starting lighter at the beginning and culminating in an all-nighter on the last day.
What drove your choice of language?
When faced with a limited amount of time to accomplish as much as possible, the best language is the language you know best. I’ve used Haskell in some past contests, but years of developing Revit in C++ on a daily basis have made it the language where I can be most effective.
Will you enter again?