Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: Alternativa pentru compilatoarele de la OJI  (Citit de 5398 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
flo_demon
Strain
*

Karma: 20
Deconectat Deconectat

Mesaje: 46



Vezi Profilul
« : Februarie 28, 2008, 18:09:22 »

Salut, ok, doar acuma aceasta discutie mi-a fost pointed out, nu prea frcventez infoarena..sorry

Ideea de a face un evaluator mi-a fost sugerata de domnul profesor Galatan Constantin, acum cateva luni. Sunt familiar cu criza compilatorului, am busit si eu destul din cauza Borland-ului, am participat si eu la olimpiade, nationala, concursuri, .campion topcoder etc.. nu sunt inafara temei Tongue, anyway, acuma sunt a 12-a so a last moment sa contribui si eu cu ceva.

Nu vroiam sa anunt decat peste 2 saptamani, cand sunt gata testarile complete, dar am avut acest impuls de moment sa profit de discutie.

Am facut un evaluator special pentru OJI. Deja e 3 luni in development (desigur lucrand azi 2 zile full, apoi 2 sapt. pauza, sau cand se ivea ocazia Tongue) si acuma e gata Very Happy   Banana(aprox 4000 de linii, posibil sa mai creasca in weekend, odata cu testarile si idei noi). Va asigur e meserias, si o unealta foarte profesionala. Planuiesc ca in jur de 4 martie sa fac un public beta, odata cu ideile de functionare, si documentatie ajutatoare.
As vrea ca toata lumea sa il testeze, sa isi dea cu parerea, sa se straduie sa gaseasca buguri, care le-as fi putut scapa in faza de testare. Evaluatorul este scris in Managed C++ in .NET si foloseste librariile .NET (pentru interfata, parsari etc..) si foloseste headere native Win32, si functii de kernel pentru procesul critic de rulare sub limite a unei solutii.
Ar fi multe de zis, dar la release, cateva features :

* rularea in mod consola si in mod grafic (GUI). Asemenea utilitarelor de linux este complet parametrizat, (peste 20 de parametrii care definesc outputul produs, si cum sa se comporte evaluatorul). Adica e posibil ca evaluatorul sa fie folosit de un third party, poate nu va place interfata, scrieti una in altceva, si folositi eval-ul in mod consola. Alta idee ar fi de ex, sa fie un judge online, care sa foloseasca ca engine evaluatorul in mod consola...
Are si o interfata misto si usor de folosit. Aici trebuie putin lucrat dupa usability tests, pana in 4 martie si un copil de clasa I o s il poata folosi.

* compilare si curatare automata. Adica se poate specifica orice numar de compilatoare sa fie folosite.. de ex. se poate specifica ca sursele ce se termina in .cpp sa fie compilate si cu g++, si cu Borlandc (doar un exemplu) si cu alt compilator, orice.. sau sursele in .pas sa fie compilate in Free Pascal, adica suporta orice compilatoare oricate (doar din fisierul de configurare, fara recompilarea evalului)  Compilarea se face automat. Un concurent daca vrea poate scrie o sursa si in c++ si in C si Pascal pentru aceeasi problema.
Binarele se vor pune in foldere bine determinate dupa id si compilator folosit.
Directiva de compilare este complet customizabila din fisierele de configurare si interfata.
Vreti sa folositi whatever parametrii, no problem. dirctivele de compilare sunt complet customizabile din configurare. Outputul produs de compilator este salvat pentru fiecare concurent pentru fiecare problema, fiecare compilator. pt later viewing.

* curatare.
Exact ca si la ONI cand folderul cu id-ul concurentului se ia cu totul, exact asa functioneaza si evalul asta. Folderele se vor pune pe un stick apoi direct copiate in folderul de surse al rundei evaluate. Evaluatorul va curata orice fisiere ilegale, si va lasa doar sursele la probleme. Scandal ca in alti ani, ati salvat cu litere mari, no problem, convert automat la lowercase..etc..curatare


* limita de timp!
* limita de memorie!
* evaluarea e foarte precisa, oricum v-ati declara memorie nu veti primi mai mult decat limita. Executia e perfect oprita la timp. Rezultatele evaluarii sunt salvate punctaje, timp folosit, memorie folosita, rezultate pe fiecare test etc..
Producerea de borderouri pt. fiecare concurent. Evaluarea corectitudinii se va face prin rularea unui valid.exe produs de propunatorul problemei. Mesajul produs de valid.exe se salveaza odata cu rezultatele pe test, posibilitat de punctaje partiale, mesaje custom etc..

* evaluatorul isi citeste informatii despre probleme, limite de timp, locatie test, locatie valid.exe, id-uri valide pentru acea runda (idurile invalide nu s eiau in considerare), toate informatiile se iau dintr-un fisier in XML.
care poate fi editat fie manual fie prin interfata grafica a evaluatorului. Fisierul de configurare al unei runde e transmisibil de la statie de evaluare la statie de evaluare
Ex. : comisia nationala face un fisier de configurare pt. clasa a 10-a. cei din comisiile judetene de evaluare tot ce trebuie sa faca e sa puna sursele in /surse/ (sau cum e definit folderul cu surse) sa incarce fisierul XML primit de la comisie si sa apase un start.

* Evaluarea se poate face test cu test (asteapta dupa fiecare test, pentru a continua, timp in care userul poate verifica punctaj, memorie, output etc..), teste specifice (sa zicem doar 2 3 si 9) sau evaluarea rapida, fara asteptare...de ex. unde e cazul pt. bucuresti, daca membrii comisiei nu pot chema 200 de elevi sa vada evaluarea..dau drumul la eval (merg beau o cafea, mananca o pizza), si revin cand e gata...evalueaza dintr-un foc toate solutiile, apoi au gata facute borderourile de catre eval, doar sa le traga la imprimanta.

* Clasament real time, Sigur sunteti familiari cu updatarea in real time de pe topcoder a clasamentului.. evalul ar in interfata si aceasta functie..Very Happy pentru suspans

* Erorile sunt logate in fisiere sau afisate. Orice mica problema e logata, pentru a strudia ce s-a intamplat gresit. Pana si curatarea fisierelor invalide din folderele concurentilor e logata.

* Totul e salvat de la mesaje de eroare la erori de compilare, timp, punctaj memorie, binare concurent, borderouri de evaluare, xml-uri cu rezultate ce ar putea fi parsate mai departe de un third party tool. Cu ceva vreme o sa faca pana si export in Exel daca e necesar Smile)

Ar mai fi de zis cam toata schema de functionare, dar deja am scris prea mult. In mare cam acestea sunt cele mai importante features. Cea mai buna chestie as zice e compilarea automata...cine mai sta sa deschida fiecare sursa in IDE sa compileze =))) Poate am mai uitat din features, daca aveti o intrebare da poate face chestia asta, sau chestia aia, sau aveti idei ... as fi happy sa raspund, poate chiar sa includ sugestii pana la beta release.

Am depus foarte multa munca si as aprecia daca ar fi acceptat de la anul de comisie, doar nu traim acuma in 1993 sau epoca de piatra.
Wait for the public beta, coming march 4. Very Happy  Banana
[edits] : clarificari Tongue
« Ultima modificare: Februarie 29, 2008, 17:23:06 de către Paul-Dan Baltescu » Memorat

Marines don't die! They go to hell and regroup
toni2007
Nu mai tace
*****

Karma: 160
Deconectat Deconectat

Mesaje: 663



Vezi Profilul
« Răspunde #1 : Februarie 29, 2008, 15:22:24 »

suna interesant  Whistle da chiar sunt curios cum faci optiunea de compilare pe mai multe compilatoare (parca asa ai zis)  Shocked
Memorat
flo_demon
Strain
*

Karma: 20
Deconectat Deconectat

Mesaje: 46



Vezi Profilul
« Răspunde #2 : Februarie 29, 2008, 16:56:08 »

Corect... poi evaluatorul isi citeste informatiile astea dintr-un fisier de configurare in xml
ex din config :
Cod:
<compilatoare nr="4">
    <compilator>
<limbaj>C</limbaj>
        <extensie>.c</extensie>
        <nume>gcc</nume>
        <directiva>C:\Dev-Cpp\bin\gcc.exe -o * *.c</directiva>
    </compilator>
....
tot ce e cu steluta se inlocuieste cu numele problemei care e compilata.
se pot specifica mai multe compilatoare pt. o extensie. Pt. fiecare fisier sursa al fiecarui concurent cu un id valid, la o problema existenta in runda si salvata cu o extensie pentru care e definit cel putin un compilator se va rula directiva de compilare, care va produce sau nu binar si output cu erori sau nu. Evalul va deschide un thread pentru compilarea fiecarei surse, 1 thread odata si asteapta terminare lui. Tongue nu vad sa fie la oji multi-core ca sa bag mai multe threaduri.
Nu e asa greu cum ti-ai imagina. E usor de adaugat compilatoare in interfata, trebuie specificat dupa cum vezi in xml, un limbaj, o extensie, un nume unic, si o directiva care e compusa dintr-un path spre compilator si parametrii 
tested java, gcc, g++, bcc oricum practic ar merge cu orice produce un binar sau ceva bytecod e interpretat.
Memorat

Marines don't die! They go to hell and regroup
toni2007
Nu mai tace
*****

Karma: 160
Deconectat Deconectat

Mesaje: 663



Vezi Profilul
« Răspunde #3 : Februarie 29, 2008, 18:02:22 »

Chestie super tare Very Happy chiar ma gandeam ca nu se poate face un eval pe windows pentru OJI adica ceva asa fara interfata si pe DOS am facut si eu (eval de OJI vechi cu optiune in plus pentru compilare pe gcc (cu compilator djgpp))gen un .bat cu "gxx %1.cpp %1.exe" si apoi run eval.bat... da eram curios cum poti face asta cu mai multe compilatoare  Aha
« Ultima modificare: Februarie 29, 2008, 18:07:53 de către Pripoae Teodor Anton » Memorat
timotei21
Strain


Karma: 2
Deconectat Deconectat

Mesaje: 5



Vezi Profilul
« Răspunde #4 : Martie 12, 2008, 21:38:39 »

mhh si totusi nu-l mai lansezi sa-l vedem si noi?:>:>
Memorat
cos_min
Nu mai tace
*****

Karma: 48
Deconectat Deconectat

Mesaje: 493


live


Vezi Profilul
« Răspunde #5 : Martie 12, 2008, 21:40:32 »

mhh si totusi nu-l mai lansezi sa-l vedem si noi?:>:>

Ii lansat: http://infoarena.ro/forum/index.php?topic=2830.0
Memorat

vid...
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines