infoarena

Comunitate - feedback, proiecte si distractie => Off topic => Subiect creat de: Bunau Florin din Februarie 28, 2008, 18:09:22



Titlul: Alternativa pentru compilatoarele de la OJI
Scris de: Bunau Florin din 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 :P, 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 :P) si acuma e gata :D   :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..:D 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. :D  :banana:
[edits] : clarificari :P


Titlul: Alternativa la compilator OJI
Scris de: Pripoae Teodor Anton din Februarie 29, 2008, 15:22:24
suna interesant  :-' da chiar sunt curios cum faci optiunea de compilare pe mai multe compilatoare (parca asa ai zis)  :shock:


Titlul: Alternativa la compilator OJI
Scris de: Bunau Florin din 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. :P 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.


Titlul: Răspuns: Alternativa pentru compilatoarele de la OJI
Scris de: Pripoae Teodor Anton din Februarie 29, 2008, 18:02:22
Chestie super tare :D 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:


Titlul: Răspuns: Alternativa pentru compilatoarele de la OJI
Scris de: Timotei Dolean din Martie 12, 2008, 21:38:39
mhh si totusi nu-l mai lansezi sa-l vedem si noi?:>:>


Titlul: Răspuns: Alternativa pentru compilatoarele de la OJI
Scris de: Bondane Cosmin din 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