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++/problema1.exe | Binarul creat pentru concurentul cu id-ul 1, pentru sursa sa la problema1, compilata cu g++ |
/bin/1/fpc/problema1.exe | Binarul creat pentru concurentul cu id-ul 1, pentru sursa sa la problema1, compilata cu fpc |
/bin/1/gcc/problema2.exe | 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? in "Intrebari frecvente":(#intrebari) )
/rezultate/ | Acesta este folderul unde se vor scrie rezultate. In acest folder se vor creea 3 foldere |
/rezultate/compilare/ | Aici se vor pune rezultatele compilarii |
/rezultate/evaluare/ | Aici se vor pune rezultatele evaluarii |
/rezultate/log/ | Aici se vor scrie loguri, cu probleme aparute in timpul compilarii si evaluarii |
Evaluatorul va crea (depinde de flagurile cu care este rulat), fisiere xml cu rezultatele totale ale compilarii si evaluarii
/rezultate/compilare/rezultat_compilare.xml | Rezultate totale ale compilarii |
/rezultate/evaluare/rezultat_evaluare.xml | Rezultate totale ale evaluarii |
In /rezultate/compilare/ se va creea pentru fiecare id, si pentru fiecare compilator folosit un folder, in care se vor pune fisiere 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.
Ex : /rezultate/compilare/1/g++/problema.g++
In /rezultate/evaluare/ pentru fiecare id si pentru fiecare compilator se vor creea fisiere de forma :
problemaQ.out | contine exact raspunsul concurentului la acea problema pe testul Q |
problemaQ.rez | 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 /rezultate/log/ se vor crea :
compilare.txt | Contine warninguri erori si exceptii aparute in timpul compilarii |
evaluare.txt | Contine warninguri erori si exceptii aparute in timpul evaluarii |
<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;
}