2022 ICPC North America Championship (NAC) Programming Environment
This page describes current plans for the Programming Environment which will be available to each 2022 NAC 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.
Hardware:
Each team at the North America Championship contest will be provided with one workstation. The configuration of the workstation will be as follows:
- Dell OptiPlex 7460 All-In-One computer.
- Processor: Intel Core i5-8500 CPU @ 3.00Ghz, 6 core
- Memory: 16GB
- Storage: 256GB NVMe SSD
- Screen: 23", 1920x1080
-
Keyboard: Dell KB216-BK-US. You can see a keyboard image
here.
-
External mouse: Dell MS116 Optical Mouse. You can see mouse images
here and
here.
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.
Software:
The software configuration for the NAC is based on that which is used at the ICPC World Finals, and will consist of the following:
-
OS:
- Ubuntu 20.04.3 LTS Linux (64-bit)
-
Desktop:
-
Editors
- vi/vim
- gvim
- emacs
- gedit
- geany
- kate
-
Languages:
-
Java
- OpenJDK version 11.0.8 with
- compiler flags: -encoding UTF-8 -sourcepath {path} -cp {path}/* -d {path} {files}
- runtime flags: -Dfile.encoding=UTF-8 -XX:+UseSerialGC -Xss64m -Xms{memlim}m -Xmx{memlim}m -cp {path}:{path}/*.
-
C
- gcc version 9.3.0 (Ubuntu 9.3.0-10ubuntu2) with compiler flags: -g -O2 -std=gnu11 -static {files} -lm
-
C++
- g++ version 9.3.0 (Ubuntu 9.3.0-10ubuntu2) with compiler flags: -g -O2 -std=gnu++17 -static {files}
-
Python 3
- PyPy version Python 3.6.9 (7.3.1+dfsg-4, Apr 22 2020, 05:15:29) with compiler flags: {files}
- A list of the installed Python modules can be found
here.
-
Kotlin
- kotlinc-jvm version 1.3.0 (JRE 11.0.8+10-post-Ubuntu-0ubuntu120.04) with
- compiler flags: -d {path} -Djava.io.tmpdir={path} {files}
- runtime flags: -J-XX:+UseSerialGC -J-Xss64m -J-Xms{memlim}m -J-Xmx{memlim}m -cp {path}
Note that Python 2 is not supported at the NAC Contest (and is no longer supported at the ICPC World Finals).
-
IDEs:
-
Eclipse 4.13 (2019-09), configured with:
- JDT (Java Development Tools version 3.18.100.v20190916-1045 using Java as listed above)
- CDT (C/C++ Development Tools version 9.9.0.201909091956 using C/C++ as listed above)
- PyDev (Python Development Environment version 7.3.0.201908161924 using Python 3 as listed above)
-
IntelliJ (IDEA Community Edition version 2019.2.2), configured with:
- Java as listed above
- Kotlin plugin 1.3.41-release-IJ2019.2
-
CLion (version 2019.2.2), configured with:
-
Pycharm Community Edition Python IDE (version 2019.2.2), configured with:
-
Code::Blocks (version 17.12-1), configured with:
-
Visual Studio Code (version 1.63.2), configured with:
- Microsoft C/C++ Version 1.9.7. (Note that the Judges will compile C/C++ programs with GCC
as listed above, not with Microsoft C/C++.)
Compilation of Submissions
During the contest, teams will submit proposed solutions to the contest problems to the Judges using the
Kattis Contest Control System.
Check the Kattis Team Guide for further details.
Source files submitted to the Judges will be compiled using the language systems and flags described above.
The "{files}" in the above descriptions 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 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 3: the main source file will be executed by the PyPy3 Python3 interpreter to generate the output of the submission.
- For Java: the compiled main class will be executed using the java command with the runtime flags listed above.
- For Kotlin: the compiled main class will be executed using the kotlin command with the runtime flags listed above.
Compilation and execution as described above will take place in a "sandbox" on a dedicated judging machine.
The judging machine will be as identical as possible to, and at least as powerful as, the machines used by teams.
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 descriptions show the stack size and heap size settings which will be used when the program is run in the sandbox.
Build Instructions:
Instructions for building a system identical to what is planned for team use at the NAC are posted
here.
Please note that the image created by these instructions is a draft,
subject to changes as we approach the contest.
See the Revised date 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 NAC, and will be installed automatically as part
of the steps listed under Build Instructions, above.
- JDK JavaDocs
- C++ STL docs
- Kattis Team Guide (as linked above)
- Additional Information:
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, NAC Technology Director.
Update History
May 12, 2022 Posted updated image on Image Build page (jlc)
May 7, 2022 Posted updated image on Image Build page (jlc)
May 5, 2022 Posted updated image on Image Build page (jlc)
May 4, 2022 Added links to Tech Notes and Judging Notes (jlc)
May 3, 2022 Changed links to open in a new tab/window (jlc)
May 3, 2022 Updated image posted on Image Build page (fixes Alt-Tab) (jlc)
April 15, 2022 Added links to Kattis Team Guide and Mouse images (jlc)
April 14, 2022 Added VSCode to IDE list (jlc)
April 12, 2022 Updated keyboard details; updated mailto address (jlc)
April 11, 2022 Updated hardware descriptions and language versions (jlc)
April 09, 2022 Initial version, cloned from NAC 2021 description(tjb)
Page views since Apr 9, 2022: