Revizia anterioară Revizia următoare
Aceasta pagina e in constructie
LimeEval
<br><br>
Screenshots

<br><br><br>
Structura de fisiere a evaluatorului
In folderul root al evaluatorului :
lime.exe | Executabilul evaluatorului | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
compilatoare.xml | Fisier de configurare a compilatoarelor | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
errlog.txt | Fisier unde se scriu unele erori si warninguri |
! Numele de mai jos sunt doar exemple nu sunt fixe, ele depind de configurarea fiecarei runde
Undeva pe disc :
fisier_runda.xml | Fisier de configurare al unei runde | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
/surse/ | Folder unde se vor pune folderele personale fiecarui id |
In surse se poate copia orice. Folderele si fisierele care nu sunt solutii la probleme si nu au extensiile valide
vor fi sterse
/surse/1/ | Folderul id-ului nr 1 |
/surse/2/ | Folderul id-ului nr 2 |
/surse/3/ | Folderul id-ului nr 3 |
/teste/ | Folderul cu testele problemelor |
Pentru fiecare problema specificata in fisierul cu teste trebuie sa fie un folder cu numele acesteia.
Acesta trebuie sa contina testele de intrare, testele de iesire corecte si un (verificator) verif.exe - care verifica corectitudinea raspunsului concurentului
pe out-ul produs de acesta. (mai multe in "Intrebari frecvente":(#intrebari) )
/teste/problema1/ | Folder pentru problema1 |
/teste/problema2/ | Folder pentru problema2 |
/bin/ | Aici se vor pune sursele compilate ale concurentilor |
Se va creea de catre evaluator pentru fiecare id un folder cu valoarea id-ului, si pentru
fiecare compilator cu care s-au compilat sursele concurentului, va exista un folder
si in fiecare folder va exista un executabil, cu numele problemei compilate
(Daca compilarea a avut succes). Ex :
/bin/1/g++/problema1exe | Binarul creat pentru concurentul cu id-ul 1, pentru sursa sa la problema1, compilata cu g++ |
/bin/1/fpc/problema1exe | Binarul creat pentru concurentul cu id-ul 1, pentru sursa sa la problema1, compilata cu fpc |
/bin/1/gcc/problema2exe | Binarul creat pentru concurentul cu id-ul 1, pentru sursa sa la problema2, compilata cu gcc |
/eval/ | Aici se vor evalua binarele concurentilor |
In acest folder se vor copia in mod repetat fisiere in, se vor redenumi, se vor copia
binarele concurentilor, in acest folder se vor rula, aici se va rula verif-ul etc..
(Vezi : Cum se produce evaluarea)
/<rezultate>/ In acest folder se vor creea 3 foldere :
/<rezultate>/compilare/
/<rezultate>/compilare/rezultat_compilare.xml
/<rezultate>/evaluare/
/<rezultate>/log/
Vor avea fix aceste nume.
In 'compilare' se va creea pentru fiecare id, si pentru fiecare compilator folosit
un folder, in care se va pune un fisier de forma : "<problema>.<compilator>" , in care va fi exact outputul
produs de compilator.
De ex : g++-ul si gcc-ul, la o compilare reusita, scrie 2-3 linii noi. La o compilare gresita e stackul de erori
rezultat_compilare.xml contine rezultatele generale ale compilarii
Ex : /<rezultate>/compilare/<1>/g++/<problema>.g++
In 'evaluare' pentru fiecare id si pentru fiecare compilator se vor creea fisiere de forma :
"<problema><nrtest>.out" - care contine exact raspunsul concurentului la acea problema pe acel test
"<problema><nrtest>.rez" - care contine rezultatul evaluarii. Pe prima linie un intreg (punctajul obtinut pe test)
Pe a doua linie un intreg, memoria folosita pe acel test.
Pe a 3-a linie un intreg, punctajul obtinut pe test
Pe a 4-a lini eun mesaj (OK, Puntcaj Partial, Gresit, etc..)
In 'log' se vor crea "compilare.txt" si "evaluare.txt" care vor contine mesaje de eroare
exceptii si warninguri ce apar in timpul compilarii.
<br><br><br>
Instructiuni de folosire
<br><br><br>
Download runde
<br><br><br>
Intrebari frecvente
- 1. Runde
- 2. Compilatoare
- 3. Compilare
- 4. Evaluare
- 5. Runtime
<br><br><br>
Sursa verif
Verificatorul este necesar pentru a puncta fisierul OUT produs de concurent. Trebuie pus sub forma de executabil in fisierul cu testele problemei.
Mai jos este o sursa generala de verificator. Sursa are implementate functii de comparare bit la bit, si a numarului din fisier. Pentru probleme cu solutii multiple sau un alt mod de verificare vor trebui implementate si alte functii de verificare a rezultatului.
Shimbati #define-urile INFILE, OUTFILE, si OKFILE cu numele corespunzatoare.
#include <stdio.h>
/* !!! schimba <problema> cu numele problemei */
#define INFILE "problema.in"
#define OUTFILE "problema.out"
#define OKFILE "problema.ok"
FILE *fIN, *fOUT, *fOK, *fV;
bool openFiles(); /* deschide fisierele si verifica existenta lor */
void closeHandles(); /* inchide fisierele */
bool compareBitByBit(); /* compara out si ok, bit la bit */
bool compareNumber(); /* compara numerele din out si ok */
int main()
{
if(!openFiles()) return 0;
if (compareBitByBit())
fprintf(fV, "10\nCorect");
else
fprintf(fV, "0\nGresit");
closeHandles();
return 0;
}
bool openFiles()
{
fIN = fopen(INFILE, "r");
fOUT = fopen(OUTFILE, "r");
fOK = fopen(OKFILE, "r");
fV = fopen("punctaj.verif", "w");
if (!fIN)
{
fprintf(fV, "0\nFisier IN lipsa.");
closeHandles();
return false;
}
if (!fOUT)
{
fprintf(fV, "0\nFisier OUT lipsa.");
closeHandles();
return false;
}
if (!fOK)
{
fprintf(fV, "0\nFisier OK lipsa.");
closeHandles();
return false;
}
return true;
}
void closeHandles()
{
if (fIN) fclose(fIN);
if (fOUT) fclose(fOUT);
if (fOK) fclose(fOK);
if (fV) fclose(fV);
}
bool compareBitByBit()
{
char b1, b2;
int ret1, ret2;
while (1)
{
ret1 = fscanf(fOUT, "%c", &b1);
ret2 = fscanf(fOK, "%c", &b2);
if (ret1 > 0 && ret2 <= 0) return false;
if (ret1 <= 0 && ret2 > 0) return false;
if (b1 != b2) return false;
if (ret1 <= 0 && ret2 <= 0) return true;
}
return true;
}
bool compareNumber()
{
int nr1, nr2;
fscanf(fOUT, "%d", &nr1);
fscanf(fOK, "%d", &nr2);
if (nr1 != nr2) return false;
return true;
}