Diferente pentru limeeval intre reviziile #26 si #37

Nu exista diferente intre titluri.

Diferente intre continut:

h1=. *LimeEval*
table{border-style: hidden}.
|\350/2^~.  * Este un evaluator gratuit pentru mediul Windows, care automatizeaza procesului de compilare si punctare a problemelor de natura algoritmica.
* Creat in special pentru a aduce suport schimbarilor necesare Olimpiadei Judetene de Informatica, *trecerea la compilatoare pe 32 de biti*
* Destinat OJI-ului si a concursurilor de informatica (interjudetene, pe clasa etc..) pentru a facilita o compilare si evaluare a concurentilor automatizata intr-un mediu sigur.
* Destinat elevilor si profesorilor care sustin o activitate de pregatire la informatica cu probleme de concurs
<br>
Linkurile de download sunt in dreapta.
Pentru a rula evaluatorul aveti nevoie de un sistem de operare Windows XP, si framework-ul .NET 2.0 instalat.
<br>
(toc){width:100px}* *{'Screenshots':limeeval#screenshots}*
* *{'Structura de fisiere a evaluatorului':limeeval#structura}*
* *{'Instructiuni de folosire':limeeval#instructiuni}*
** {'Tutorial 1 : Instalare si configurare compilatoare':limeeval#t1}
** {'Tutorial 2 : Creare si definire runda':limeeval#t2}
** {'Tutorial 3 : Compilarea si evaluarea unei runde definite anterior':limeeval#t3}
** {'Tutorial 4 : Consola grafica - warninguri si erori':limeeval#t4}
** {'Tutorial 5 : Rulare evaluator in mod consola':limeeval#t5}
* *{'Download runde':limeeval#dlrunde}*
* *{'Intrebari frecvente (FAQ)':limeeval#intrebari}*
* *{'Sursa verif':limeeval#verif}*
<br>
|-=. !limeeval?lime_logo.png!|
|^. (toc){width:340px}* *Versiune* :
** {'0.9.3.17':limeeval?lime_0.9.3.17.exe}
** -0.9.3.11-
* *Framework .NET* :
** {'2.0':http://www.microsoft.com/downloads/details.aspx?FamilyID=0856EACB-4362-4B0D-8EDD-AAB15C5E04F5&displaylang=en}
* *Functii generale* :
** - mod consola / mod grafic
** - configurare completa din interfata
** - compilare automata surse concurenti (selectiva sau totala)
** - posibilitate de specificare a compilatoare multiple
** - directive custom de compilare
** - salvare output compilatoare pe fiecare sursa
** - xml generat cu rezultatele compilarii tuturor concurentilor
** - evaluare (selectiva sau totala) in mod sandbox
** - limitare de timp si limitare de memorie
** - evaluare test cu test, sau rapida
** - salvarea in fisier individual outputului produs de fiecare concurent pe fiecare test
** - salvare in fisier individual rezultate evaluare pe fiecare test (punctaj, timp, memorie, mesaj verif)
** - xml generat cu rezultatele totale ale evaluarii
** - curatare foldere concurenti \ filtrare surse \ redenumire surse
** - error reporting, exceptii, warninguri, erori, salvate in fisiere si afisate in consola grafica
* *To Do* :
** - clasament real time, si detasat din tab control
** - exportare borderouri in *.txt-uri individuale pentru fiecare concurent
** - exportare clasament in *.xls (Excel)
* *Buguri cunoscute* :
** - in timpul evaluarii in mod grafic (fara pauza), daca se tot face resize la tabel, aplicatia se blocheaza. (thread deadlock)
|
h5=. *Aceasta pagina are nevoie de o rescriere totala, pentru a fi actuala cu versiunea curenta a evaluatorului, corectat de buguri si cu new features. Pagina va fi rescrisa la lansarea versiunii 1.0*
<br><br>
Sunt ocupat cu bac-ul acuma, nu mai am timp sa curat sursa si sa o pun la liber, dar dupa BAC, am sa fac niste documentatie, si instructiuni de utilizare videouri etc.. si o sa lansez proiectul ca Open Source
h3(#screenshots). *Screenshots*
!limeeval?1.png!:http://i27.tinypic.com/2ljklxu.jpg
!limeeval?2.png!:http://i25.tinypic.com/14uvtwo.png
!limeeval?3.png!:http://i32.tinypic.com/mio3yq.png
!limeeval?4.png!:http://i31.tinypic.com/2vnnp00.png
!limeeval?5.jpg!:http://i29.tinypic.com/2mpyc95.jpg
!limeeval?6.jpg!:http://i28.tinypic.com/2u43qe0.jpg
Ultimul build e din /05/26, modificari la autodetectarea idurilor si functii de curatare. Enjoy.
<br><br><br>
 
h3(#structura). *Structura de fisiere a evaluatorului*
 
In folderul root al evaluatorului :
 
|\100. %{color:green}lime.exe% | Executabilul evaluatorului |
|\100. %{color:blue}compilatoare.xml% | Fisier de configurare a compilatoarelor |
|\100. %{color:#e67658}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 :
 
|\150. %{color:blue}fisier_runda.xml%|Fisier de configurare al unei runde|
|\150. %{color:#d1ac3b}/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*
 
| %{color:#d1ac3b}/surse/1/% | Folderul id-ului nr 1 |
| %{color:#d1ac3b}/surse/2/% | Folderul id-ului nr 2 |
| %{color:#d1ac3b}/surse/3/% | Folderul id-ului nr 3 |
 
|\85. %{color:#d1ac3b}/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) %{color:green}verif.exe% - care verifica corectitudinea raspunsului concurentului pe out-ul produs de acesta. (mai multe in "Intrebari frecvente":limeeval#intrebari )
 
|\0. %{color:#d1ac3b}/teste/problema1/% | Folder pentru problema1 |
|\0. %{color:#d1ac3b}/teste/problema2/% | Folder pentru problema2 |
 
|\125. %{color:#d1ac3b}/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 :
 
| %{color:#green}/bin/1/g++/problema1.exe% | Binarul creat pentru concurentul cu id-ul 1, pentru sursa sa la problema1, compilata cu g++ |
| %{color:#green}/bin/1/fpc/problema1.exe% |  Binarul creat pentru concurentul cu id-ul 1, pentru sursa sa la problema1, compilata cu fpc|
| %{color:#green}/bin/1/gcc/problema2.exe% |  Binarul creat pentru concurentul cu id-ul 1, pentru sursa sa la problema2, compilata cu gcc |
 
| %{color:#d1ac3b}/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":limeeval#intrebari )
 
| %{color:#d1ac3b}/rezultate/% | Acesta este folderul unde se vor scrie rezultate. In acest folder se vor creea 3 foldere |
| %{color:#d1ac3b}/rezultate/compilare/% | Aici se vor pune rezultatele compilarii |
| %{color:#d1ac3b}/rezultate/evaluare/% | Aici se vor pune rezultatele evaluarii|
| %{color:#d1ac3b}/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
 
| %{color:blue}/rezultate/compilare/rezultat_compilare.xml% | Rezultate totale ale compilarii |
| %{color:blue}/rezultate/evaluare/rezultat_evaluare.xml% | Rezultate totale ale evaluarii |
 
 
In %{color:#d1ac3b}/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 : %{color:#e67658}/rezultate/compilare/1/g++/problema.g++%
 
In %{color:#d1ac3b}/rezultate/evaluare/% pentru fiecare id si pentru fiecare compilator se vor creea fisiere de forma :
 
| %{color:#e67658}problemaQ.out% | contine exact raspunsul concurentului la acea problema pe testul Q |
| %{color:#e67658}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 %{color:#d1ac3b}/rezultate/log/% se vor crea :
 
| %{color:#e67658}compilare.txt% | Contine warninguri erori si exceptii aparute in timpul compilarii |
| %{color:#e67658}evaluare.txt% | Contine warninguri erori si exceptii aparute in timpul evaluarii |
 
<br>
 
h3(#instructiuni). *Instructiuni de folosire*
 
Instructiunile de folosire sunt sub forma de screenshoturi insotite de text explicativ si indicatii.
 
p(#t1). "*Tutorial 1* - Instalare si configurare compilatoare":http://www.flickr.com/photos/14249976@N07/sets/72157604092678918/
 
p(#t2). "*Tutorial 2* - Creare si definire runda":http://www.flickr.com/photos/14249976@N07/sets/72157604097029643/
 
p(#t3). "*Tutorial 3* - Compilarea si evaluarea unei runde definite anterior":http://www.flickr.com/photos/14249976@N07/sets/72157604097113831/
 
p(#t4). *Tutorial 4* - ConsolaGrafica - warninguri si erori
"img1":http://www.flickr.com/photos/14249976@N07/2325989309/ "img2":http://www.flickr.com/photos/14249976@N07/2325989433/
 
p(#t5). *Tutorial 5* - Rulare evaluator in mod consola
"img1":http://www.flickr.com/photos/14249976@N07/2326813878/ "img2":http://www.flickr.com/photos/14249976@N07/2325996707/ "img3":http://www.flickr.com/photos/14249976@N07/2325996831/ "img4":http://www.flickr.com/photos/14249976@N07/2325996911/ "img5":http://www.flickr.com/photos/14249976@N07/2326814246/ "img6":http://www.flickr.com/photos/14249976@N07/2325997073/ "img7":http://www.flickr.com/photos/14249976@N07/2326814388/ "img8":http://www.flickr.com/photos/14249976@N07/2325997195/
 
<br>
 
h3(#dlrunde). *Download runde*
 
<br>
 
h3(#intrebari). *Intrebari frecvente*
 
(toc){width:340px}* *1. Runde*
** {'1.1 Ce este o runda?':limeeval#i1}
** {'1.2 Prin ce se defineste o problema intr-o runda?':limeeval#i2}
** {'1.3. Prin ce se defineste un id valid?':limeeval#i3}
** {'1.4 Ce path-uri catre foldere specifice sunt intr-o runda?':limeeval#i4}
* *2. Compilatoare*
** {'2.1 Ce contine o configurare de compilatoare?':limeeval#i5}
* *3. Compilare*
** {'3.1 Cum se produce compilarea?':limeeval#i6}
* *4. Evaluare*
** {'4.1 Cum se produce evaluarea?':limeeval#i7}
** {'4.2 Ce trebuie sa indeplineasca \ implementeze un verificator?':limeeval#i8}
* *5. Runtime*
** {'5.1 Ce se intampla in cazul unei exceptii aparute la rularea solutiei concurentului?':limeeval#i9}
 
h4. *1. Runde*
 
p(#i1). *1.1 Ce este o runda?*
O runda e o colectie de probleme, iduri valide pentru acea runda, si path-uri catre foldere specifice.
 
p(#i2). *1.2 Prin ce se defineste o problema intr-o runda?*
 
* Un nume unic (sa nu mai existe in aceeasi runda o problema cu acelasi nume)
 
* Un timp de executie (cat e limita de timp pe acea problema)
 
* O limita de memorie (cat e limita de memorie pe acea problema)
*nu specificati limita prea joasa* , de ex, este o limita inferioara de memorie necesara oricarui program compilat astfel incat el sa ruleze (chiar daca contine doar == code(cpp) | int main() { } == si nu foloseste nici o variabila). El totusi foloseste memorie pentru a rula. A se da o valoare astfel incat sa se tina cont de asta.
 
* O masca de teste IN
Adica ce nume au testele in. de ex :
"test*.in"   steluta se va inlocui cu numarul testului => (test1.in, test2.in ..)
sau :
problema.*I => (problema.1I, problema.2I ..)
 
* O masca de teste OUT (la fel ca si la in)
 
* Un interval de teste, intre ce valoari avem teste, ex : teste de la 0 la 20 sau 1 la 10
 
* campul de autor al problemei este optional (nu are utilitate)
 
p(#i3). *1.3. Prin ce se defineste un id valid?*
Un id valid este un id care va fi luat in considerare la compilare \ evaluare
In folderul cu surse se pot copia orice foldere si fisiere. Toate foldere ce nu au nume de iduri valide vor fi sterse automat
 
p(#i4). *1.4 Ce path-uri catre foldere specifice sunt intr-o runda?*
 
| Teste | path catre locatia testelor la probleme|
| Surse | locul unde se vor copia folderele cu idurile concurentilor (ce vor contine surse) |
| Bin   | Locatia unde se vor pune sursele compilate |
| Evaluare | Locatia unde se va face evaluarea (vezi : Cum se face evaluarea? in "Intrebari frecvente":limeeval#intrebari) |
| Rezultate | Locatia unde se vor pune rezultatele (compilarii, evaluarii si logurile) |
 
p(#i5). *2.1 Ce contine o configurare de compilatoare?*
Contine o lista de compilatoare care au definite :
 
* Un Limbaj
 
* O extenise a fisierelor sursa pentru acel compilator.
*Trebuie specificata cu punct!* Ex : ".cpp" , ".pas"
 
* Un nume unic care identifica compilatorul (sa nu existe 2 compilatoare cu acelasi nume) "g++", "gcc" ..
 
* O directiva de compilare
Aceasta trebuie sa fie formata astfel : Path catre compilator (executabil) + flaguri.
De ex : "C:\Dev-Cpp\bin\g++.exe -o * *.cpp"
prima parte e path-ul, iar "-o * *.cpp" sunt parametrii.
Steluta va fi inlocuita cu numele problemei compilate. Daca am compila problema 'arbore' intreaga directiva ar arata asa :
"C:\Dev-Cpp\bin\g++.exe -o arbore arbore.cpp"
Adica produce ca output un executabil cu numele dat dupa flagul -o compiland sursa arbore.cpp
 
p(#i6). *3.1 Cum se produce compilarea?*
Pentru fiecare folder cu nume de id valid, el va fi selectat si va fi curatat astfel incat sa ramana doar fisierele cu nume de probleme valide, si care au extensii de surse, la care s-au definit compilatoare.
Ele se vor compila cu directiva de compilare, iar binarele vor fi puse conform structurii descrise.
La fiecare compilare se vor sterge folderele :
%{color:#d1ac3b}/evaluare/% , %{color:#d1ac3b}/rezultate/% si %{color:#d1ac3b}/bin/%
Compilarea produce sau nu, conform flagurilor setate fisiere cu outputul compilatorului si rezultate totale
 
p(#i7). *4.1 Cum se produce evaluarea?*
Cand se evalueaza o problema a unui concurent se va curata folderul %{color:#d1ac3b}/evaluare/%
 
* se copiaza fisierul de test curent. Ex : daca e testul 5, test5.in, se redenumeste dupa : numeproblema.in
 
* se copiaza binarul concurentului
 
* se ruleaza in sandbox (limitat) binarul
 
* se copiaza .ok-ul oficial
 
* se copiaza verif.exe
 
* se ruleaza verif.exe care va produce un fisier : punctaj.verif unde pe prima linie se va specifica punctajul acordat pe test, iar pe a doua linie se va scrie mesajul : OK, sau Gresit ..etc..
 
* se copiaza (daca avem setate flagurile specifice), out-ul concurentului produs, in %{color:#d1ac3b}/rezultate/evaluare/% (conform "structurii fisierelor":limeeval#structura)
 
* se mai salveaza si punctaj.verif, tot in /rezultate/evaluare/ conform structurii
 
p(#i8). *4.2 Ce trebuie sa indeplineasca \ implementeze un verificator?*
Unui verificator (verif.exe) i se pune la dispozitie de catre evaluator, un fisier .out al concurentului, un .ok. El trebuie sa produc ca si output un fisier cu numele 'punctaj.verif';
Este treaba verificatorului sa verifice daca .out-ul exista sau nu, daca .ok-ul exista sau nu, si sa
trateze aceste cazuri, afisand mesaje corespunzatoare in 'punctaj.verif'. Trebuie neaparat sa produca un 'punctaj.verif'.
 
p(#i9). *5.1 Ce se intampla in cazul unei exceptii aparute la rularea solutiei concurentului?*
Orice exceptie sau eroare care apare la rularea solutiei concurentului nu afecteaza cu nimic evaluatorul sau procesul de evaluare. Ceea ce se va intampla, Windows, va produce un dialog de eroare. Fiindca acest dialog este creat *de catre Windows* ca un thread apartinand procesului concurentului, aparitia acestui mesaj va "manca" din timpul alocat concurentului. Astfel daca concurentul va scrie la un pointer null, evaluatorul va afisa TLE. Mesajele de eroare in general se inchid singure la oprirea solutiei concurentului. Cele care nu se inchid singure, pot fi ignorate, sau inchise.
 
<br><br><br>
 
h3(#verif). *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.
 
== code(cpp) |
#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;
}
==
 
h3. {'LimeEval - build 0.9.5.26 (build 0.9.5.26)':limeeval?lime_v0.9.5.26.zip}

Nu exista diferente intre securitate.

Topicul de forum nu a fost schimbat.