ICFP Programming Contest 2018


Register a contest team to obtain a team-specific private identifier.

Prepare a single .zip file with exactly the generated trace files for the lightning division or full contest (depending on the current phase of the contest). The .zip file may optionally be encrypted (zip --encrypt (Unix); 7-Zip Encryption method: ZipCrypto (Windows)) with the team-specific private identifier (if a team is concerned about posting submissions to a publicly accessible location during the contest). Compute the SHA256 checksum (shasum -a 256 (Unix); 7-Zip File -> CRC -> SHA-256 (Windows); certutil -hashfile submission.zip SHA256 (Windows; info); Get-FileHash submission.zip -Algorithm SHA256 (Windows; info)) of the .zip file. Make the .zip file available at a publicly accessible URL. Submit the URL and SHA256 checksum of the .zip file before the end of the current phase of the contest.


Teams may use any hosting platform that is publicly accessible (a personal or institutional web server, Dropbox, Google Drive, etc.).

Teams may submit multiple times during the contest (using either a new or the same URL, but different SHA256 checksum), but are limited to one submission every 15 minutes; early submissions may be evaluated during the contest for live standings, but only the last submissions for the lightning division and full contest will be considered for prizes. The last submissions for the lightning division and full contest should remain available for up to two weeks after the end of the contest. (Note: Be sure to use distinct URLs for the final lightning division submission and the final full contest submission.)

During the contest, the contest organizers will periodically attempt to download and check submissions and report submission acknowledgements. Checking of a submission for acknowledgement is limited to: downloading success; SHA256 checksum matching success; zip archive testing success; expected file listing success. Checking of a submission for acknowledgement does not check that trace files successfully decode to sequences of commands or that the traces are correct for the corresponding problems. (Note: Make sure that the submission available at the URL before submitting the URL and SHA; otherwise, the download may fail and the submission be rejected.)

Downloading and checking of submissions during and after the contest will be automated. Please make sure that submission URL can be downloaded without user interaction. If a submission acknowledgement shows failure, then investigate the behavior of the following approximation of the download-and-check script:

curl -L -f -o submission.zip ${submissionURL} && \
echo "${submissionSHA}  submission.zip" | shasum -c && \
unzip -P ${privateID} -qt submission.zip

Google Drive

A special note for contestants using Google Drive. The “Get shareable link” feature of Google Drive does provide publicly accessible URLs, but the URLs are meant to be used in a web browser with JavaScript (and not suitable for use as a submission URL, due to the need for user interaction). However, it is straightforward to convert a “Get shareable link” URL of the form https://drive.google.com/open?id=1d4p8B6BhDOL-bpNlXzc2d0Yij55nPu-a to a direct-download link of the form https://drive.google.com/uc?id=1d4p8B6BhDOL-bpNlXzc2d0Yij55nPu-a, which is suitable for use as a submission URL.

Alternative Method

For teams wishing to automate submission, the following curl command template can be used:

The response will be a JSON object with a "result" key having the value "success" or "failure". If the "result" key has the value "failure", then the JSON object will have a "msg" key having a string value describing the error. If the "result" key has the value "success", then the JSON object will have "privateID", "submissionURL", "submissionSHA", and "timestamp" keys, each with string values.