rules »

Programming Environment

2018 ICPC World Finals Programming Environment

This page describes current plans for the Programming Environment which will be available to each 2018 World Finals team.  Please note that these plans are subject to change.  See the "Update History" list at the bottom of this page for information on the currency of what is shown here.


Each team at the World Finals will be provided with one workstation consisting of the following hardware:

  • Dell laptop, model M2800
    • CPU - Intel Core i7-4710MQ Quad-core
    • RAM - 16GB
    • Disk - 512GB SATA SSD
  • External screen: Dell model E2316H 23-inch 1920 x 1080 monitor
  • External keyboard: Dell model KB212-B wired USB keyboard 
  • External mouse: Dell model MS111-P wired three-button USB mouse

Teams will only be allowed to use the external monitor/keyboard/mouse; the laptop will remain closed and its screen and keyboard will not be accessible.

No hardware substitutions will be allowed (that is, teams may not bring their own equipment onto the contest floor).  This includes that teams may not substitute keyboards or other peripherals; all teams will use identical equipment, as described above, during the contest.


The software configuration for the World Finals will consist of the following:

  • OS:
    • Ubuntu 16.04.3 LTS Linux (64-bit)
  • Desktop:
    • GNOME
  • Editors
    • vi/vim
    • gvim
    • emacs
    • gedit
    • geany
    • kate
  • Languages:
    • Java
      • OpenJDK version 1.8.0_131
      • OpenJDK Runtime Environment (build 1.8.0_131-8u131-b11-2ubuntu1.16.04.3-b11)
      • OpenJDK 64-Bit Server VM (build 25.131-b11, mixed mode)
    • C
      • gcc (Ubuntu 5.4.0-6ubuntu116.04.4) 5.4.0 20160609
    • C++
      • g++ (Ubuntu 5.4.0-6ubuntu116.04.4) 5.4.0 20160609
    • Python 2
      • Python 2.7.10 (implemented using PyPy 5.1.2). A list of the installed modules can be found here
    • Python 3
      • CPython 3.5.2.  A list of the installed modules can be found here
    • Kotlin
      • version 1.1.4-3
  • IDEs:
    • Eclipse 4.7 (Oxygen), configured with:
      • Java (OpenJDK version 1.8.0_131)
      • C/C++ (CDT 9.3.0 with Ubuntu 5.4.0-6ubuntu116.04.4 5.4.0 20160609)
      • PyDev (Python) 5.8.0
    • IntelliJ (IDEA Community Edition 2017.2.3), configured with:
      • Java (version TBD)
      • Kotlin plugin version 1.1.4-3
    • CLion (version 2017.2.2), configured with
      • C/C++ (version TBD)
    • Pycharm Community Edition Python IDE version 2017.2.2
    • Code::Blocks (version 13.12+dfsg-4), configured with
      • Java (OpenJDK version 1.8.0_131)
      • C/C++ (CDT 9.3.0 with Ubuntu 5.4.0-6ubuntu116.04.4 5.4.0 20160609)

Compilation of Submissions

During the contest, teams will submit proposed solutions to the contest problems to the Judges using the DOMJudge contest control system. Source files submitted to the Judges will be compiled using the following command line arguments for the respective language:

  • C:

gcc -g -O2 -std=gnu11 -static ${files} -lm

  • C++:

g++ -g -O2 -std=gnu++14 -static ${files}

  • Java:

javac -encoding UTF-8 -sourcepath . -d . ${files}

  • Python 2

python2 -m py_compile ${files}

  • Python 3

python3 -m py_compile ${files}

  • Kotlin

kotlinc -d . ${files}

The "${files}" in the above commands represents the list of source files from the submission which will actually be compiled. Files with the following suffixes (and only files with these suffixes) will be submitted to the compiler:

  • For C submissions: files ending with .c
  • For C++ submissions: files ending with .cc, .cpp, .cxx, or .c++
  • For Java submissions: files ending with .java
  • For Python submissions: files ending with .py
  • For Kotlin submissions: files ending with .kt

Execution of Submissions

For each language, if the above compilation step is successful then the submission will be executed as follows:

  • For C/C++:  the executable file generated by the compiler will be executed to generate the output of the submission.  
  • For Python 2: the main source file will be executed by the PyPy Python interpreter to generate the output of the submission.
  • For Python 3: the main source file will be executed by the CPython Python3 interpreter to generate the output of the submission.
  • For Java: the compiled main class will be executed using the following command:

java -Dfile.encoding=UTF-8 -XX:+UseSerialGC -Xss64m -Xms1920m -Xmx1920m

  • For Kotlin: the compiled main class will be executed using the following command:

kotlin -Dfile.encoding=UTF-8 -J-XX:+UseSerialGC -J-Xss64m -J-Xms1920m -J-Xmx1920m

Execution as described above will take place in a "sandbox".  The sandbox will allocate 2GB of memory; the entire program, including its runtime environment, must execute within this memory limit.  For interpreted languages (Java, Python, and Kotlin) the runtime environment includes the interpreter (that is, the JVM for Java/Kotlin and the Python interpreter for Python).

The sandbox memory allocation size will be the same for all languages and all contest problems.  For Java and Kotlin, the above command shows the stack size and heap size settings which will be used when the program is run in the sandbox.  For C, C++, and Python, the heap and stack sizes are limited only by the total amount of memory available in the sandbox.

Build Instructions:

Instructions for building a system identical to what is planned for team use at the World Finals are posted here.  Please note that the image created by these instructions is a draft, subject to changes as we approach the World Finals.  See the Revised  list at the bottom of that page to determine the most recent change date.

Reference Materials:

These packages will be available on team machines at the World Finals, and will be installed automatically as part of the steps listed under Build Instructions, above. 

We welcome all suggestions and comments.  This configuration is subject to change until the final update.  All questions about the system configuration should be directed to John Clevenger, ICPC Technical Director.

Update History

April 3, 2018       Updated Tech Notes to 2018 WF version
March 25, 2018      Updated link to DOMJudge Team Guide; updated Python and Kotlin compile/execute commands
March 23, 2018      Uploaded DOMJudge Team Guide
March 9, 2018        Updated team machine configuration
February 19, 2018  Updated Judge's Notes for 2018
January 1, 2018     Updated keyboard/monitor/mouse specifications and images
October 3, 2017     Added Kate to the list of available editors
September 11, 2017  Updated Kotlin/IDEA/CLion/PyCharm version numbers
August 30, 2017     Updated Language and IDE version numbers; updated Python module list links
August 28, 2017     Added Code::Blocks IDE
August 28, 2017     Updated Kotlin and CLion version numbers
August 26, 2017     Added CLion IDE, updated various language and IDE version specifications
August 26, 2017     Updated hardware details; updated language and IDE specifications
August 23, 2017     Updated to reflect 2018 World Finals


Last modified on 14:09 PM Aug 08, 2018