Nu exista diferente intre titluri.
Diferente intre continut:
h1. Evaluatorul infoarena
== include(page="documentatie/sidebar")==
... este responsabil de evaluarea solutiilor trimise de utilizator.
h2. Cum se evalueaza o problema
Iata *lista oficiala* de compilatoare folosite de evaluatorul infoarena:
|_. Compilator si versiune|_. Comanda de compilare |_. Extensie implicita |
| GNU GCC 4.1.2 | $gcc -Wall -O2 -static … -lm$ | c |
| GNU G++ 4.1.2 | $g++ -Wall -O2 -static … -lm$ | cpp |
| FreePascal Compiler 2.0.0 | $fpc -O2 -Xs …$ | pas |
table{width:80%}. |_. Compilator si versiune|_. Comanda de compilare |_. Extensie implicita |
| GNU GCC 10.2.0 | $gcc -DINFOARENA -Wall -O2 -std=c11 -static … -lm$ | c |
| GNU G++ 10.2.0 | $g++ -DINFOARENA -Wall -O2 -std=c++14 -static … -lm$ | cpp |
| FreePascal Compiler 3.0.0 | $fpc -O2 -Xs … -dINFOARENA$ | pas |
| OpenJDK Java 11.0.16 | $javac …, java -Xmx512m -Xss128m -DONLINE_JUDGE=true -Duser.language=en -Duser.region=US -Duser.variant=US …$ | java |
| Python 3.9.2 | $python3 …$ | py |
| Rust 1.64.0 | $rustc --edition 2021 -O …$ | rs |
h2. Configuratia sistemului de evaluare
Evaluatorul ruleaza pe un calculator dedicat, oferit de ==User(type="tiny" user="fluffy")==. (Multumim, Leo!)
* Sistem de operare: Debian stable(sarge)
* Procesor: Pentium IV, $2.0 GHz$
* Memorie: $512 MB RAM$
h2. Gazduire !>documentatie/evaluator?hqn.png!
Evaluatorul infoarena este gazduit cu placere de catre "HQN (High Quality Networks)":http://hqn.ro/.
* Sistem de operare: Debian 11
* Procesor: Intel Pentium(R) Dual-Core CPU E6600 @ 3.07GHz
* Memorie: $8GB RAM$
h2. Mesaje de evaluare
* Memory limit exceeded: Ai depasit limita de memorie. Majoritatea problemelor au o limita de 64 de mega, pe care noi o consideram destul de generoasa.
* Time limit exceeded: Programul tau a depasit limita de timp. Asta inseamna ca programul tau nu este destul de rapid.
* Wall time limit exceeded: Evaluarea a durat prea mult si a fost abandonata. Evaluatorul infoarena masoara doar timpul folosit de programul tau pentru a determina daca iti da TLE, dar exista si o limita fata de "ceasul de perete". Acest mesaj poti sa il obtii daca faci sleep, scanf de la stdin si alte functii care stau degeaba fara sa consume efectiv procesorul.
* Non-zero exit status: Programul tau a returnat o valoare diferita de 0. Cel mai probabil ai uitat return 0; sau ceva similar.
* Blocked system call: Ai accesat o functie la care nu ai access. Nu ar trebui sa primesti aceasta functie decat daca incerci explicit sa faci ceva interzis.
* Killed by signal: Cea mai frecventa eroare cand ai un bug in program. Cand un program incalca anumite conventii in UNIX acel program primeste un "semnal" care de cele mai multe ori il opreste. Cateva semnale comune:
** 11(SIGSEGV): Segmentation fault. Asta in 99% din cazuri inseamna ca ai probleme cu accesul la memorie. Ai iesit din limitele unui vector, ai facut stack overflow, etc.
** 8(SIGFPE): Floating point error. Cauza cel mai frecvent de impartiri la 0.
** 8(SIGFPE): Floating point error. Cauzat cel mai frecvent de impartiri la 0.
* Non-zero exit status: Programul tau a returnat o valoare diferita de 0. Cel mai probabil ai uitat return 0; sau ceva similar. Poti primi acest mesaj si in loc de mesajul "Killed by signal": verifica si dupa erorile mentionate deasupra.
Evaluatoarele problemelor iti vor da si ele un mesaj scurt, cel mai frecvent ceva de genul "OK" sau "Wrong Answer", dar unii propunatorii au umor :).
Pentru programatorii in Borland C/Pascal este important de tinut minte ca evaluatorul infoarena este un mediu *foarte* diferit fata de dos. Cateva erori comune si cum pot fi rezolvate
* Pe infoarena se face I/O din fisiere, nu de la stdin, stdout. Daca faci scanf de la stdin vezi obtine cel mai probabil "Wall time limit exceeded" (vezi mai sus) iar daca faci printf la stdout rezultatul tau va fi ignorat.
* Pe infoarena se face I/O din fisiere, nu de la stdin, stdout (cu exceptia problemelor 'interactive':documentatie/tutorial#probleme-interactive). Daca faci scanf de la stdin vezi obtine cel mai probabil "Wall time limit exceeded" (vezi mai sus) iar daca faci printf la stdout rezultatul tau va fi ignorat.
* tipul int din GCC este pe 32 de biti, nu 16 ca in Borland C/C++, char - 8 biti, short - 16 biti, long - 32, long long - 64
* folositi sprintf in loc de itoa sau ltoa.
* programul de evaluare ruleaza pe un sistem de operare UNIX. Folositi "\n" pentru terminarea liniei curente, nu "\r\n"
Nu exista diferente intre securitate.
Topicul de forum nu a fost schimbat.