17 Aug 2017

We have now run the first elimination round for the lightning contest. There were 80 entries in total.


You can now watch replays of all the test games on PuntTV.

Bad punters

As a preprocessing step we removed all entries that were incapable of scoring anything at all on our simplest test map: lambda.json, even if they moved first.

Some teams did not implement the handshake. Given that it was not present in the original (slightly buggy) version of the spec, we wrote a small wrapper that still enabled those teams to compete.

The following 28 teams were unable to score anything on the lambda map.

  • Adlersprung
  • A Storm Of Minds
  • chirimenjako
  • code-o-matic
  • d4o
  • DNIWE :: a
  • Get Counterstrike and Race for the Galaxy at http://store.steampowered.com/!
  • Goto11
  • Junk Food
  • kstm.org
  • lambda-llama
  • Leonardone @ NEETSDKASU
  • LILiK
  • masakt
  • MIPT Lambda
  • ome
  • perpertuum mobile
  • powder
  • ?!?
  • Sideways Spider
  • sonna*baka*na
  • Sunspear
  • TBD
  • The Cat is #1!!
  • The Flux Ambassadors
  • The Pragmatic Russians
  • Turing Machinists

They are now eliminated from the lightning round.

One team (cashto) was able to score on the lambda map when futures are disabled but not when enabled. Another team (negainoido) was able to score on the lambda map when futures were enabled but not when disabled.

Calculating the scores

For the first round we used five small maps (with between 60 and 187 rivers) both with and without futures enabled. Every game was played with 4 teams.

For each map a random assignment was performed and for each group of four players, four games were played on that map (in order to allow each player to start first, second, third, and fourth). Thus each team (with the exception of cashto and negainoido) played a total of 40 games.

For each group, the sum of the scores for each player in that group over the four games was calculated in order to obtain a ranking. Points were then awarded based on the ranking (1st: 4 points, 2nd: 3 points, 3rd: 2 points, 4th: 1 point).

The total number of points for each team was calculated by taking the sum of the points for each group they played in. So the maximum possible number of points was 40 and the minimum number was 10 (with the exception of cashto and negainoido, who only played in five groups each).

The results

Team Points      Score        
The $ound of .\ 37 107032
Unagi 37 98292
CDT 37 73978
kontur.ru 36 58544
AIM Tech 35 77431
THIRTEEN 34 67929
All your lambda are belong to us 34 64787
fixstars 33 125126
ゲームセンターYAGI 31 71386
NCPLUG 31 59810
jabber.ru 31 26633
Frictionless Bananas 30 57292
This is an albatrocity! 30 51764
DrunkAlexSh 30 38780
Udon 29 51955
zeta 29 51832
Eger a Marson 29 35411
DiamondPrincess 28 51382
GennAI 28 49476
The Blind Hen 28 39045
master_thesis 28 38542
Popes who died violently 28 33968
SpiritRaccoons 28 27625
O Caml, My Caml 27 31072
uni 27 17664
Stifinderne 26 46236
trup16 25 49198
foosbar 25 48692
Skobochka 25 38338
Sirius Cybernetics Corporation 25 37481
SML/Punter 24 51019
Piggybank Software 24 33734
BargeHauler 23 33251
uguu.org 23 12276
Sampou 22 27370
Enoch Root 21 67656
SKI 21 14903
Olympia 21 9062
Love and Lies 21 4465
301 19 12300
cvnm 19 8540
paiv 18 4082
WinterMUTE 15 2721
YukashitaOu 14 906
okeydaj 13 1770
shinh11 12 -2735
blueiris 11 3208
Lambada Calculus 11 160
negainoido 9 8174
cashto 6 67

The median number of points is 25.5. Any team with a points total below 25.5 is now eliminated from the lightning contest.

Interestingly, there is not a direct correlation between aggregate score and aggregate points. For instance, the team with the highest aggregate score (fixstars) is the team with the 8th highest aggregate points. Team shinh11 deserves special mention for being the biggest (and worst) gamblers.


07 Aug 2017

alt text (photograph from fisuk.org)

It is time to hop off the punt and go ashore. The contest ended a little over an hour ago. We would like to thank all contestants for punting with us. We hope you enjoyed punting on the ICFP contest rivers.


Please make sure your latest submission is accessible by us, e.g. visit the Google Drive shareable link in incognito mode.

Quite a few contestants have told us that they forgot to type their shareable link along with the MD5 checksum into the submission system. In case you find yourself in this situation then you can still register your submission via the submission system. Note: We only accept this submission if the timestamp on your Google Drive submission is prior to the official submission deadline.


We will post further information regarding the evaluation of submissions in the coming weeks. Stay tuned!

Languages powering the contest

For this contest we have used a variety of programming languages. The servers and tools were written in the following languages

Yet again, thank you punting with us!


07 Aug 2017

Hello again punters! We hope you are enjoying the last part of the contest.

The contest will be ending in three hours time. Please remember to share your entries with icfpcontest2017@gmail.com on Google Drive and to register here.

Good luck!


06 Aug 2017

Hello punters!

Tony Hoare refers to null pointers as his billion-dollar mistake. Option types, popularised by functional programming languages, provide a much cleaner alternative.

This extension has nothing whatsoever to do with null pointers or option types!

New extension: Options

This extension enables options, which allow a punter to use a river claimed by another punter. Every punter is allowed to buy n options during the game where n is the number of mines. Each river claimed by a punter has exactly one option which might be bought by a second punter.

The rules for scoring are unaffected – but sharing a route with another punter might be a good option from time to time.

You can find the specification here.

Happy punting, and good luck!


06 Aug 2017

Hello again punters! We hope you are enjoying the contest.

New extension: Splurges

In 1984, Philip Wadler posited that listlessness is better than laziness. We would like you to help us investigate this claim!

This extension enables splurges, which allow a punter to be lazy (pass!) for n turns, and then claim a list of n + 1 contiguous rivers at once.

The rules for scoring are unaffected — but being lazy may improve your chances of building a good route!

You can find the specification here.

Lambda Duct v0.3

Earlier, we also updated Lambda Duct to version 0.3. Lambda Duct allows you to test your offline mode by relaying your moves to the game servers.

The major change from v0.2 is that v0.3 uses blocking I/O instead of non-blocking I/O.

Good luck, and happy punting!


05 Aug 2017

Hello punters!

We hope you are getting on well.

Due to the webserver glitches at the start of the contest, we are extending the lightning round deadline by 1 hour. Therefore, the new deadline will be: 13:00 UTC

To submit for the lightning division register here, package your submission into a single .tar.gz file with the registration code as file name, upload it to GoogleDrive, and share the entry with icfpcontest2017lightning@gmail.com. More details in section 7 of the problem description.

Good luck!


05 Aug 2017

We have released the initial version of Lambda Duct – an offline mode simulator for Lambda Punter. Lambda Duct acts as a bridge between a client in offline mode and an online game server.

Please refer to the Lambda Duct repository on GitHub for instructions on how to install and use it.


Install Lambda Duct via OPAM

$ opam pin add lambda-duct https://github.com/icfpcontest2017/lambda-duct.git

Then supply the name of your client program (configured to run in offline mode) and the port of the game you want to connect to

$ lamduct --game-port <port> ./<name of client program>

Note the ./ in front of the client program name.

Happy punting!


04 Aug 2017

The Futures are here!

We are releasing the first extension of the contest: Futures. Futures are bets on reaching a particular site from a mine and are well rewarded if fulfilled. But beware because failure can be costly …

The Futures specification is here.

We also made modifications to the problem description bumping it to version 1.3.


  • Fixed typo in the type of the contents of the “timeout” message: Float rather than GameState.
  • Clarified which moves are sent along with a stop message.

  • Clarified that the size header in a message is a string.

  • Clarified that the VM will be used for the evaluation.

04 Aug 2017

We updated the task description to version 1.2.

Biggest change is an update of the protocol to clarify how timeouts are measured.


  • Updated protocol to include handshakes in offline mode and to specify more precisely where timeouts occur.

  • Clarification on the game outcome when multiple punters score equally.

  • Clarification over the treatment of illegal moves by the server.

  • Clarification over the maximum length of messages.

  • Clarified meaning of disjoint union operator.


04 Aug 2017

Hello punters!

We hope you’re getting on well with punting so far.

We apologise for the initial issues with the web server being overloaded when the task was announced – we’d thought that the university servers would be able to take more punishment! We have now moved the website over to GitHub so this shouldn’t happen again.

There have also been some teething problems with PuntFX, but we are working these out. These will not affect punters connecting directly to the test servers.

We will take the servers offline in 15 minutes for maintenance; we expect downtime to be around 10 minutes.


04 Aug 2017

The task description is now available here. Good luck!


28 Jul 2017

alt text

VM update

We have uploaded an updated version of the VM. A number of other requests have come in and we will upload a further update early next week.

We recognise that some participants may only realise that they want to use a particular tool or library once they know what the task is. That should be fine providing the requested package is reasonably easy to install on the VM and you include installation instructions along with your submission.

We will give full details of the submission process along with the task description next Friday.


21 Jul 2017

alt text

The contest begins in two weeks time. Here is some preliminary information about the rules.


Each participant must be a member of exactly one team. Teams may not divide or collaborate with one another once the contest has begun. There is no limit to the number of members of a single team.

Intellectual property

Contest participants retain ownership of all intellectual property rights in and to any submitted source codes, custom tools, and related materials (“Submissions”) that participants had before submission. As a condition of entry, participants grant the judges a non-exclusive, perpetual, irrevocable, worldwide, royalty-free license to use, reproduce, publish, distribute, publicly perform, and publicly display the Submissions for the purposes of allowing the judges to test and evaluate the Submissions for purposes of the contest.


04 Jul 2017

alt text

Welcome to the official website for the ICFP Programming Contest 2017, the 20th instance of the annual programming contest series sponsored by The ACM SIGPLAN International Conference on Functional Programming.

This year’s contest is brought to you by LFCS at the University of Edinburgh. It will be held for 72 hours, starting from 4th August 2017 12:00 UTC and 7th August 2017 12:00 UTC.


The task will be published on this website when the contest starts. Solutions must be submitted online before the contest ends. Details of the submission procedure will be announced along with the contest task.

The contest is open to everyone except for contest organisers, their families, and members of their institutions. Neither advance registration nor entry fee is required.

Programming languages

Any programming languages may be used as long as the submitted program can be run by the judges on a standard Linux environment with external network access disabled.


The judging environment is a virtual machine running a recent version of Debian with a selection of programming languages installed. It is available as a Virtual Box image here.

For further details take a look at the readme, which contains instructions and details the default languages and environments that are installed.

Please let us know before the contest if you would like us to install anything else.


There will be prizes for the first and second place teams, the team winning the (24 hour) lightning division, and a discretionary judges’ prize. The winners will be announced at ICFP 2017 in Oxford, UK, on Tuesday 5th September 2017.

In addition, the organisers will declare during the conference that:

  • the first place team’s language is “the programming language of choice for discriminating hackers”,
  • the second place team’s language is “a fine tool for many applications”,
  • the winning lightning division team’s language is “very suitable for rapid prototyping”, and
  • the team winning the judges’ prize is “an extremely cool bunch of hackers”.


We will post updates to this website. You can also: