채점 환경
BeeTREE 채점기가 제출 코드를 실행하는 방법입니다. 아래 명령은 언어별 기본 설정이고, 채점할 때는 메모리 옵션 같은 세부 값이 조금 다를 수 있습니다.
채점 절차 요약
- 제출 코드는 임시 디렉터리에 저장되어 격리된 컨테이너 안에서 실행됩니다.
- 컴파일이 필요한 언어는 먼저 컴파일하고, 실패하면 바로
compile_error로 끝납니다. - 각 테스트케이스의 입력은 표준입력(stdin)으로 주어지고, 표준출력(stdout)이 정답과 비교됩니다.
- 출력 비교에서는 줄 끝 공백과 마지막 개행 같은 사소한 차이는 허용하고, 나머지가 정확히 같아야
accepted로 판정합니다. - 스페셜 저지(checker)가 설정된 문제는 정답과 직접 비교하지 않고 채점 스크립트의 판정을 따릅니다. 체커는
checker INPUT OUTPUT ANSWER순서(testlib 표준)로 호출되며, C/C++ 체커에는testlib.h가 기본 제공됩니다. - 모든 단계는 시간/메모리 제한 안에서 끝나야 하며, 넘으면 각각
time_limit_exceeded/memory_limit_exceeded로 판정합니다. - 런타임 에러(0이 아닌 종료코드, 시그널, 예외)는
runtime_error로 분류됩니다.
샌드박스
- 각 제출은 독립된 Docker 컨테이너 안에서 실행되며, 채점기 호스트의 파일/네트워크에 접근할 수 없습니다.
- 네트워크는 꺼져 있어(
--network=none) 외부와 통신할 수 없습니다. - 실행 디렉터리는 컨테이너 내부 임시 영역으로, 채점이 끝나면 즉시 삭제됩니다.
- 컴파일/실행 프로세스는 root가 아닌
nobody사용자 권한으로 동작합니다. - 동시에 너무 많은 프로세스가 생성되지 않도록 언어별 PID 제한이 적용됩니다.
- 채점 시스템을 공격하는 시도(컨테이너 탈출, 자원 고갈 등)는 바로 계정 제한 사유가 됩니다.
제한 시간 · 메모리
- 각 문제마다 시간 제한과 메모리 제한이 표시되며, 모든 테스트케이스에 동일하게 적용됩니다.
- 시간 제한은 wall-clock(실행 경과 시간) 기준입니다. 컴파일 시간은 별도로 측정되며 채점 시간에 포함되지 않습니다.
- 컴파일러/인터프리터의 시작 오버헤드(JVM 등)는 실행 시간에 포함되므로 언어별 보너스가 적용됩니다.
- 아래 언어별 카드에 적힌 "최대" 시간은 컨테이너를 강제로 끝내는 절대 상한이고, 실제 채점에는 문제별 시간 제한이 먼저 적용됩니다.
언어별 컴파일 · 실행 명령
환경설정 → 컴파일러 버전에서 다른 버전을 선택하면 해당 버전 이미지로 채점됩니다. Python 3.11~3.14, GCC 12~15(C++23, C++26 포함), Java 17·21 등 여러 버전을 고를 수 있습니다.
Assembly (32-bit)
sol.asm최대 10s
컴파일
nasm -f elf32 sol.asm -o sol.o && if grep -Eq '^[[:space:]]*global[[:space:]]+_start([[:space:]]|$)' sol.asm; then ld -m elf_i386 sol.o -o sol; else gcc -m32 -no-pie sol.o -o sol; fi
실행
./sol
Assembly (64-bit)
sol.asm최대 10s
컴파일
nasm -f elf64 sol.asm -o sol.o && if grep -Eq '^[[:space:]]*global[[:space:]]+_start([[:space:]]|$)' sol.asm; then ld sol.o -o sol; else gcc -no-pie sol.o -o sol; fi
실행
./sol
Bash
sol.sh최대 15s
실행
bash sol.sh
C
지원 버전: GCC 13 · GCC 15 · GCC 14 · GCC 12
sol.c최대 10s
컴파일
gcc -O2 -o sol sol.c -lm
실행
./sol
C#
sol.cs최대 15s
컴파일
mcs -out:sol.exe sol.cs
실행
mono sol.exe
C++
지원 버전: GCC 13 · C++17 · GCC 14 · C++23 · GCC 15 · C++23 · GCC 15 · C++26 (실험적) · GCC 12 · C++17
sol.cpp최대 10s
컴파일
g++ -O2 -std=c++17 -o sol sol.cpp -lm
실행
./sol
Go
지원 버전: Go 1.22 · Go 1.23 · Go 1.21
sol.go최대 10s
컴파일
go build -o sol sol.go
실행
./sol
Java
지원 버전: Java 21 · Java 17 (LTS)
Main.java최대 15s
컴파일
javac Main.java
실행
java -XX:+UseContainerSupport Main
JavaScript (Node.js / Bun)
지원 버전: Node.js 20 · Node.js 22 · Node.js 18 · Bun 1.x
sol.js최대 15s
실행
node sol.js
Kotlin
Main.kt최대 20s
컴파일
kotlinc Main.kt -include-runtime -d sol.jar
실행
java -XX:+UseContainerSupport -jar sol.jar
OCaml
sol.ml최대 10s
컴파일
ocamlopt -O2 -o sol sol.ml
실행
./sol
PHP
sol.php최대 15s
실행
php sol.php
Python
지원 버전: Python 3.14 · Python 3.13 · Python 3.12 · Python 3.11
sol.py최대 15s
실행
python3 -B sol.py
Ruby
sol.rb최대 15s
실행
ruby sol.rb
Rust
지원 버전: Rust 1.77 · Rust 1.80
sol.rs최대 10s
컴파일
rustc -O -o sol sol.rs
실행
./sol
Swift
sol.swift최대 15s
컴파일
swiftc -O -o sol sol.swift
실행
./sol
TypeScript (Deno)
sol.ts최대 15s
실행
deno run --quiet --no-prompt sol.ts
Visual Basic
sol.vb최대 15s
컴파일
vbnc -nologo -out:sol.exe sol.vb
실행
mono sol.exe
아희 (Aheui)
sol.aheui최대 15s
실행
aheui sol.aheui
엄준식
sol.umm최대 15s
실행
umjunsik sol.umm
참고: Java/Kotlin 같은 JVM 언어에는 컨테이너 메모리를 제대로 인식하도록-XX:+UseContainerSupport 옵션이 자동으로 붙습니다. C/C++는 -O2 최적화, Rust는 -O, OCaml은 -O2 가 켜진 상태로 컴파일됩니다. 채점 환경 관련 문의는 BeeTREE Discord로 연락 주세요.