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
, 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
) si acuma e gata
(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..
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
)
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.
[edits] : clarificari