21 Sep 2017

The source code for the lambda punter server is now available here.


06 Sep 2017

The winners of the 2017 ICFP contest were announced on Tuesday evening at ICFP. Unfortunately, due to a misunderstanding, the presentation was not recorded. (A video release form was signed, but the A/V people thought it was an administrative presentation that didn’t need to be streamed or recorded!)

You can, however, watch the replays of all the games on PuntTV, and the full results are detailed below.

Ligntning contest round 3

A total of 16 teams made it through to round 3 of the lightning contest. We evaluated the punters on two large maps with the futures extension enabled.

The Edinburgh map is the largest one used for evaluation. It has 10000 rivers and 32 mines.

The ICFP coauthors map includes one site for each author of an ICFP paper who has coauthored a paper with another ICFP author. The rivers are the coauthor connections. The one mine in the large connected component represents Simon Peyton Jones.

Before running the evaluation we eliminated all punters who scored 0 on the Edinburgh map - due to timing out. This left us with 8 remaining teams. We played all teams together on both maps

Following a discussion on the mailing list we adopted the methodology in the task description rather than the one we had used in the previous rounds. The difference is that we compute ranking points across all games rather than computing ranking points by first aggregating the score across all games in a group. (The current approac is a bit more fine-grained, but has little effect on the final results and no effect on the winners.)

Here are the final results.

Team Points Score
The $ound of .\ 124 249440846
GennAI 95 26808098
kontur.ru 89 27258506
fixstars 76 245972318
Unagi 71 25355640
code-o-matic 61 1311707
A Storm Of Minds 34 513964
AIM Tech 34 21888

The $ound of .\ and fixstars both did very well on the Edinburgh map, scoring an order of magnitude more than other teams. However, fixstars had problems with the coauthor map and so The $ound of .\ are a long way ahead.

The winners of the prize for 1st place in the lightning contest ($500) are The $ound of ..

We officially declare that OCaml is very suitable for rapid prototyping.

Full contest round 3

A total of 32 teams made it through to round 3 of the lightning contest. We evaluated the punters on four large maps.

The ICFP coauthor and Edinburgh maps are the same ones we used in the lightning contest. Vancouver is a map with 3601 rivers and 4 mines. Oxford is a map with 10000 rivers and 3 mines.

Before running the evaluation we again eliminated all punters who scored 0 on the Edinburgh map (this time with all extensions enabled)

  • due to timing out. This left us with 17 remaining teams. We played all teams together on all maps.

Here are the final results.

Team Points Score
Frictionless Bananas 1053 230901103
DiamondPrincess 924 104459039
JODY HiGHROLLERS 854 56500318
The Blind Hen 827 118433150
GennAI 740 17913994
Adlersprung 734 32813674
Piggybank Software 694 98547270
Wile E. 660 80268070
Begot 614 24063869
trup16 581 20340988
A Storm Of Minds 576 23677727
code-o-matic 544 9528083
Love and Lies 423 9101316
AIM Tech 384 3963862
Lambding Snakes vs Coding Monkeys 356 92927
Olympia 328 2420547
FromRedmondWithLove 170 1037753

Frictionless Bananas always did well, coming first on the Edinburgh and ICFP coauthor maps and second on the other two, which were more resource-constrained. GennAI won the Vancouver map, just, and Adlersprung convincingly won the Oxford map.

The prize for second place ($500) goes to DiamondPrincess.

We officially declare that C++ is a fine tool for many applications.

The prize for first place ($1000) goes to Fricitionless Bananas.

We officially declare that C++ is the programming language of choice for discriminating hackers.

(The highest placed entry written using a genuine functional programming language was from The Blind Hen, who came fourth and who used OCaml.)

Judges prize

The winners of the judges prize ($500) are powder for providing us with the junction map which we used in the second round of both contests. The powder team asked us to point out that they are the developers of “The Powder Toy” game.

We officially declare that powder is an extremely cool bunch of hackers.


29 Aug 2017

The results of the second round of the full contest are now available. You can watch the replays of all the games on PuntTV.


A total of 60 teams took part in the second round. The following maps were used with a selection of extension combinations always including futures.

  • junction (futures+splurges, futures+options)
  • gothenburg (futures+options)
  • nara (futures)
  • tube (futures+splurges, futures+splurges+options)

For each of the 6 map and extension combinations, we assigned groups of 16 teams (each group playing 16 times in order to allow every team to play in every position).

Team Points Score
Frictionless Bananas 96 7708649
Unagi 90 5414581
All your lambda are belong to us 86 6727070
A Storm Of Minds 85 4495018
DiamondPrincess 83 3361761
Sampou 82 4430524
Adlersprung 81 8199220
Begot 79 3565795
Wile E. 74 3342106
GennAI 74 2575571
The $ound of .\ 72 1778739
Olympia 70 2279084
hayatox 68 2831088
jabber.ru 68 2056021
FromRedmondWithLove 66 1531965
trup16 64 3994150
The Blind Hen 61 4028370
TBD 61 1843234
Popes who died violently 60 1529801
Piggybank Software 59 4181789
AIM Tech 59 3634896
punteros 59 3098733
Lambding Snakes vs Coding Monkeys 59 1477094
udfew 59 505953
Love and Lies 56 1036131
BargeHauler 54 3104709
code-o-matic 54 1855570
flash 52 2152706
HHP 50 2851596
Turing Machinists 50 1925260
kstm.org 50 1200699
Frog 49 1644530
fixstars 48 3993161
SpiritRaccoons 47 910190
zeta 46 49354
CDT 44 635011
O Caml, My Caml 44 90952
ALAMBDA 42 704356
Eger a Marson 41 1841227
alexf 39 1343185
powder 39 769143
SoyuzMultfilm 39 54435
uguu.org 37 696681
?!? 37 473659
cw 37 282901
301 35 741631
Dark Integers 34 1136383
cashto 31 72562
Lambada Calculus 28 461641
perpertuum mobile 28 235891
Sirius Cybernetics Corporation 27 779609
negainoido 26 1649867
SKI 24 129514
RagingMushrooms 21 15860
peeingbananas 21 -185638
THIRTEEN 17 1111694
NCPLUG 14 2976
Udon 12 0

The median number of points is 50. Any team with fewer points is now eliminated.

The results of round 3, including the winners, will be announced at ICFP on Tuesday.

Patched punter contest (unofficial)

A number of teams have asked for more details on why their punters have been failing. In some cases this has helped them to identify small patches to make them work with our test framework. Examples of such patches include the word “Maybe” and the line “fflush(stdout);”.

Some teams have asked if we can try out their patched punters. If you can provide us with a small patch and build instructions that we can follow easily then we will be happy to run your patched punters in a special round in which we will also pit them against the eventual winners of the full contest. As we are quite busy just now, the actual evaluation may happen after the ICFP conference.


28 Aug 2017

The results of the first round of the full contest are now available. Their were 146 entries in total.

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

Bad punters

As with the lightning contest, we do not include entries that failed to score on our simplest test map. In total, 26 entries failed to score:

  • ゲームセンターYAGI
  • aelburicus
  • ball.icfp2017
  • Canivsar
  • chirimenjako
  • Dragons
  • frosch03
  • Get Counterstrike and Race for the Galaxy at http://store.steampowered.com/!
  • IKS
  • InforFun
  • Junk Food
  • KMCDragon
  • lambda-llama
  • Lambda Riot
  • Leonardone @ NEETSDKASU
  • Lonely Punter
  • masakt
  • MaxInt
  • Milky Holmes
  • OtakuPunter
  • paiv
  • Parse error
  • sonna*baka*na
  • VorpalSwords
  • Xiphon and the physicists
  • YukashitaOu

The most common problem seems to be that the protocol is not implemented correctly — resulting in some kind of exception being raised. Several entries fail to include the message size in their messages. There are various problems with managing the serialised game state. Some entries expect the server to send JSON state in the setup message matching a schema that is only defined by their clients. Another problem is relying on a particular order for fields of JSON objects that did not match the one of our testing framework. Some entries rely on writing state to the file system (explicitly disallowed by the specification). At least one entry always attempts to make illegal moves.


A total of 120 teams took part in the first round. We used the same methodology as for the first round of the lightning contest, but with one fewer map (we only used one of the randomly generated maps compared with two in the first round of the lightning contest).

The maps are here:

For each of the 8 possible combinations of extensions and each of the 4 maps we assigned groups of 4 teams (each group playing 4 times in order to allow every team to play in every position). This gave rise to a total of 3840 games.

The results are as follows.

Team Points Score
DiamondPrincess 122 287576
Wile E. 120 284758
Adlersprung 119 292268
Unagi 119 284628
Popes who died violently 117 171249
cashto 115 273929
All your lambda are belong to us 113 259105
perpertuum mobile 111 287585
The Blind Hen 111 251009
udfew 111 220973
Frictionless Bananas 110 297107
TBD 110 220775
fixstars 110 208971
negainoido 110 198196
A Storm Of Minds 109 229127
hayatox 109 228053
Sampou 108 224011
Begot 107 225625
GennAI 106 221313
trup16 105 251285
jabber.ru 105 224880
CDT 105 211690
The $ound of .\ 104 183459
Olympia 102 194563
Piggybank Software 101 256638
code-o-matic 101 212059
alexf 100 187113
Love and Lies 100 145037
zeta 99 175926
HHP 97 208198
flash 97 198635
kstm.org 97 193453
O Caml, My Caml 97 190063
301 97 155498
Udon 96 127771
BargeHauler 95 169716
AIM Tech 94 217071
Lambding Snakes vs Coding Monkeys 94 171637
THIRTEEN 94 153216
punteros 93 211867
powder 92 162225
Turing Machinists 92 108871
NCPLUG 91 210878
SoyuzMultfilm 91 194441
FromRedmondWithLove 91 119506
SpiritRaccoons 90 131663
SKI 89 168599
Sirius Cybernetics Corporation 89 154378
Dark Integers 89 114831
?!? 88 150481
RagingMushrooms 88 107867
peeingbananas 87 96911
uguu.org 86 138130
Lambada Calculus 86 101767
Eger a Marson 85 161873
cw 85 127674
Frog 83 170566
ALAMBDA 82 137211
Skobochka 81 138173
Oak 81 114415
AK 80 175089
MindSweeper 80 110732
超凶喵 80 87746
uni 79 145770
Random Hackers 76 102734
master_thesis 76 85935
Mind over Matter 75 86598
vim-team 75 71519
LILiK 74 101019
taxidriver 74 96950
DrunkAlexSh 73 57028
Creeping Lollypop 73 44017
This is an albatrocity! 72 97099
CitVeterans-Rav 72 67725
Echo 71 111773
kontur.ru 70 111075
okeydaj 70 107449
cvnm 69 77025
DNIWE :: a 68 115651
yarunee 68 70407
Enoch Root 68 65985
Bottle Kids! 67 77931
lambda-daddy 67 42303
MIPT Lambda 64 72662
The Flux Ambassadors 64 57113
The Higher Order of Zeuxis 64 41849
SML/Punter 63 69689
Celestial Dire Badger 63 36423
TeamDev 63 17971
Russian Horse Cup 61 58731
λ tracéurs 61 37505
Stifinderne 61 35577
WinterMUTE 57 13607
Goto11 55 17486
TFS_is_shit 54 22268
Sir Bedevere the Wise 53 30302
The Cat is #1!! 53 20212
shinh11 52 2400
Invisible Imp 51 23584
Dis Functional 51 13663
Lambda In Closure Act 51 8467
The Church of the Least Fixed Punt 50 21409
Codermal 49 4344
called haddock’s eyes 48 9729
codingteam 48 7531
Sunspear 47 2061
Embedded Cloud Puntifictation 45 4738
The Pragmatic Russions 45 2742
d4o 43 19269
blueiris 42 4287
The Mikinators 42 -30543
Die Zwei Nerdigen Drei 40 2344
owl 38 2395
drop table teams; 38 234
Sideways Spider 37 2737
barvins 36 128

The median number of points is 81.5. Any team with fewer points is now eliminated.

We did not manage to download the DrunkAlexSh full submission because it was not properly shared with icfpcontest2017@gmail.com, so their entry is the same as the one used for the lightning contest. We do not know whether this failure has anything to do with their state of inebriation at the time.

A number of other submissions had similar problems, but we think we managed to resolve them all. At least one team deliberately resubmitted their lightning entry to the full contest (which we have no problem with).


25 Aug 2017

As Jeremy Sawicki helpfully pointed out on the mailing list, there were some glitches in the move order for the first round of lightning results.

Lightning contest round 1 take two

We have now re-run the lightning round 1 tests and fortunately doing so did not have a huge impact on the result (most teams that did well the first time also did well the second time round).

The alternative results, which we believe fairly assign move order, are as follows.

Team Points Score
kontur.ru 39 66054
Unagi 37 98280
AIM Tech 36 91281
CDT 36 70963
The $ound of .\ 35 119030
fixstars 35 80739
All your lambda are belong to us 35 65452
THIRTEEN 34 67180
ゲームセンターYAGI 32 66639
jabber.ru 32 54207
Udon 32 49827
GennAI 30 57716
Frictionless Bananas 29 51230
This is an albatrocity! 29 50104
SpiritRaccoons 29 48127
O Caml, My Caml 29 48107
Sampou 29 36377
Stifinderne 29 34937
zeta 28 54645
NCPLUG 28 51197
Popes who died violently 28 49458
Enoch Root 28 35405
Sirius Cybernetics Corporation 27 47744
The Blind Hen 27 33304
uni 27 25676
Skobochka 26 48273
Eger a Marson 26 37689
DrunkAlexSh 26 28601
Piggybank Software 25 30635
foosbar 24 46022
trup16 24 45443
SML/Punter 24 45237
DiamondPrincess 23 37759
301 23 23597
BargeHauler 22 27919
SKI 21 21758
Love and Lies 19 4593
paiv 19 4518
Olympia 18 5948
master_thesis 17 24649
uguu.org 16 4963
okeydaj 16 973
cvnm 15 6202
YukashitaOu 14 828
blueiris 13 469
negainoido 12 9029
WinterMUTE 12 2316
Lambada Calculus 12 140
shinh11 11 -4915
cashto 6 100

The median number of points is 26. The important differences are that 2 teams no longer make the cut

  • DiamondPrincess
  • master_thesis

and 4 teams who did not do so previously now do:

  • Enoch Root
  • Sampou
  • Sirius Cybernetics Corporation
  • Skobochka

Given that we had already announced that DiamondPrincess and master_thesis had made it to round 2, we decided it not to eliminate them at this stage.


With a bit of effort we managed to free some of the punters that had previously had their poles stuck in the mud. The 9 punters that we managed to free are the following:

  • Adlersprung
  • A Storm Of Minds
  • chirimenjako
  • code-o-matic
  • LILiK
  • powder
  • ?!?
  • Sideways Spider
  • Turing Machinists

Some of these were failing to find dynamic libraries. A few more required a longer setup time than we were previously allowing. A few more do not deal correctly with redundant meta data that we were originally passing. Finally, some of them have not quite implemented the protocol correctly in that they depend on the input stream being closed after the server has sent its messages. (Part of the reason we found these fixes is because we tried a lot harder with the full contest entries and some of those attempts revealed corresponding fixes to the lightning round entries.)

We are sorry that a few punters still have their poles stuck in the mud or have sunk completely. There is only so much we can do.

One entry, chirimenjako, cheats in that it relies on writing to the file system. We decided to let this go for the lightning round as we are being a bit lax, the team were open about not managing to get serialisation of state working with lamduct, and the files they generate are small. But they will be disqualified from the full contest. (We will accommodate first-run caching and be more lenient towards punters who simply write a log file - in the latter case we will replace the log file with a soft link to /dev/null.)

With all of these newly free punters, and those who wrongly missed out in our first attempt at round 1, we decided to hold a repechage. The rules and maps are the same as for round 1 proper, but only the 4 punters who lost out to the bad move order and the 9 who got their poles stuck in the mud contested it.

The results are here.

Team Points Score
Adlersprung 39 91272
A Storm Of Minds 38 68801
code-o-matic 32 53900
Skobochka 32 41105
chirimenjako 29 37479
Sirius Cybernetics Corporation 25 44509
Sampou 25 32107
powder 24 19695
Enoch Root 23 20721
LILiK 22 18605
Turing Machinists 16 7781
?!? 14 12638
Sideways Spider 11 1309

The median number of points is 25. The teams with fewer points are eliminated.

Lightning round 2

Having run the repechage we were then in a position to run round 2 with all of those punters still in the competition.

For round 2, we used the same scheme as for round one, except the maps were a little larger (including one submitted by a participant), and we had 8 players per map. We used the following four maps.

As each punter contested each map with and without futures, the minimum number of points is 8 and the maximum number of points is 64.

The results are as follows.

Team Points Score
Unagi 59 5796150
kontur.ru 58 4195790
Adlersprung 57 6779029
fixstars 53 4641090
AIM Tech 52 7073070
chirimenjako 50 6145225
All your lambda are belong to us 50 4226791
CDT 50 2825381
The $ound of .\ 49 5345143
zeta 48 6064256
GennAI 44 2863105
code-o-matic 43 3424988
Stifinderne 43 1990439
A Storm Of Minds 43 1039888
jabber.ru 39 1787923
This is an albatrocity! 38 2300986
Skobochka 37 1386159
Eger a Marson 36 2720001
SpiritRaccoons 35 1773021
Frictionless Bananas 35 1654575
Udon 34 1913563
Sirius Cybernetics Corporation 34 1525115
DiamondPrincess 30 3136581
The Blind Hen 29 1109776
O Caml, My Caml 28 1285395
Popes who died violently 27 677230
THIRTEEN 21 120837
DrunkAlexSh 19 47567
ゲームセンターYAGI 17 354343
uni 17 1
Sampou 15 192
NCPLUG 15 -11
master_thesis 11 162060

The median number of points this time is 37. All punters with fewer points are eliminated for the third round. The winner of the third (and final) round will be the winner of the lightning contest and will be announced at ICFP.

This time, a number of punters struggled with the larger maps and timed out. The lowest scoring punters had particular problems here. However, even some of the higher scoring punters timed out occasionally on the larger maps.


As usual you can watch replays of all the games on PuntTV.


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: