Titlul: Yet another evaluator, wrote by me (0.65 stable) Scris de: Sanduleac Dan din Aprilie 11, 2009, 19:10:52 Salut toata lumea!
Cu prilejul acestui mesaj public evaluatorul meu de probleme, scris in Python. El se foloseste de jrun, folosit si de evaluatorul Infoarena (http://infoarena.ro/documentatie/evaluator), pentru a evalua teste individuale, deci poate fi considerat mai degraba o 'interfata' destul de avansata pentru jrun. Programul, fiind scris in Python, este portabil, dar datorită neportabilităţii lui jrun care foloseşte tehnici exclusive sistemelor Linux, funcţionează doar pe Linux. Ultima versiune: 0.65 - stabilă Programul de versioning este acum mercurial (hg). Linia principală de dezvoltare şi următoarele "release-uri" stabile se vor găsi aici (http://bitbucket.org/dan.sanduleac/eval2/wiki/Home) Cum îl punem pe roate:
Cum evaluam? Pe scurt, se evalueaza cu: evaluator.py numele_executabilului [--prob numele_problemei] Se precizeaza numele problemei doar daca difera de numele executabilului pe care-l evaluam. Exemplu: Daca avem problema 'joc' (testele vor fi in directorul /home/utilizator/teste/joc, sa zicem) si executabilul de evaluat este joc_dan, scriem: Cod: evaluator.py joc_dan --prob joc Un ultim cuvant: In directorul de teste pentru o anumita problema, testele trebuie sa arate (by default) ca ?-numele_problemei.in si ?-numele_problemei.ok DAR asta se poate schimba (ori din command line, cititi evaluator.py --help, ori facand un fisier de configurare in directorul de teste). Fisierul de configurare: Fiecare problema are datele ei (limita de timp, de memorie, cum arata testele de intrare si de iesire) Pe langa faptul ca acesti parametri pot fi precizati la rularea lui evaluator.py (din consola), este posibila si crearea unui fisier de configurare din care evaluator.py sa incarce automat setarile corespunzatoare problemei evaluate. Fisierul de configurare trebuie doar sa aiba extensia 'cfg' si sa se afle in directorul de teste al problemei. Fisierul de configuratie va contine numai linii de aceasta forma: Cod: Cheie=Valoare iar 'Valoare' este .. va prindeti voi ;) Precizari:
"Localizarea automata a problemei" in directorul de teste Evaluatorul va parsa numele problemei dat de parametrul -p (identic cu --prob) si se va folosi de el inteligent: Daca ai o problema (adica directorul cu numele ei, ce ii contine testele) numita 'whatever' in directorul de teste, sub calea DIRECTORUL_DE_TESTE/ONI/2009/ziua1/whatever si vrei sa evaluezi acea problema, ai mai multe optiuni:
Astfel, problemele vor fi nu doar indexate frumos dupa "sursa de provenienta", ci si mai usor de indicat la evaluare. Exemplu concret: Cod: dan@Core:surse$ evaluator.py virus-withoutcheck -p ONI/virus Comentarii si sugestii sunt binevenite Descarcă jrun.zip (http://infoarena.ro/utilizator/sandyxp?action=download&file=jrun.zip) Titlul: Răspuns: Yet another evaluator, wrote by me Scris de: Sima Cotizo din Aprilie 13, 2009, 19:03:53 Postul se potriveste mai bine aici.
Te sustin, Dane! Evaluatorul este foarte bun si odata obisnuit cu el, face munca in linux mult mai usoara! :ok: Titlul: Răspuns: Yet another evaluator, wrote by me Scris de: Sanduleac Dan din Aprilie 13, 2009, 20:00:49 Much appreciated. Chiar eram nedumerit unde sa-l incadrez, deci iti multumesc :D
So, unde ai gasit timp sa mai si rasfoiesti infoarena la ONI ? Intriguing Sper sa mai vada si alta lume threadul :) Sau poate chiar au toti cate un evaluator bun, scris de ei, la purtator. Mai stii ? :thumbup: Titlul: Răspuns: Yet another evaluator, wrote by me Scris de: Sanduleac Dan din Aprilie 25, 2009, 01:30:28 Am uploadat pe serverul infoarena fisierele, scuze pentru intarzierea de a face acest lucru.
In curând voi face si un script care va automatiza instalarea evaluatorului si lui jrun, pentru mai putina bătaie de cap. @toni2007: ai încercat evaluator-ul pe care l-am postat eu? @Laurentiu: Start a different thread, please - [moderator] Done :D Titlul: Răspuns: Yet another evaluator, wrote by me Scris de: Pripoae Teodor Anton din Aprilie 25, 2009, 16:40:12 M-am uitat. Merge destul de bine, singura chestie care nu mi-a mers, a fost cand am incercat sa fac un program pentru a + b (in ruby). Mi-am luat Blocked System Call de la interpreter. Ar trebui reglata treaba asta.
[LE] Ar merge sa poti seta din linia de comanda timpul si memoria, preferabil ceva de genul urmator : Cod: ./eval.py prob 100 16384 Titlul: Răspuns: Yet another evaluator, wrote by me Scris de: Sanduleac Dan din Aprilie 26, 2009, 08:31:08 M-am uitat. Merge destul de bine, singura chestie care nu mi-a mers, a fost cand am incercat sa fac un program pentru a + b (in ruby). Mi-am luat Blocked System Call de la interpreter. Ar trebui reglata treaba asta. [LE] Ar merge sa poti seta din linia de comanda timpul si memoria, preferabil ceva de genul urmator : Cod: ./eval.py prob 100 16384 Aa, pai uite-te in eval.py --help. Ca zice acolo asa: Cod: -t TIME, --time=TIME time limit in milisecunde Cod: ./eval.py prob -t 100 -m 16384 Blocked System Call e vina lui jrun, care are grija sa nu iti permita sa folosesti metode de sistem (ex. fork) in codul tau. Asta este pentru siguranta serverului evaluator (infoarena) si pentru ca nu ar trebui sa ai nevoie (sau voie) sa folosesti acele "system calls" cand rezolvi probleme de informatica. Trebuie sa-mi zici cum ai incercat sa rulezi programul din ruby, si cum arata acesta. Eu de exemplu am reusit sa evaluez un program facut in python. Pur si simplu l-am facut executabil (chmod +x) si i-am adaugat #!/usr/bin/python in header. And it worked. No blocked system calls of any kind. I'm wondering why it didn't with Ruby... Apropo, limbajele "interpreted" (Python, Ruby, PHP, ...) au un mare deficit in a putea executa rapid cod pentru tipul de probleme "de informatica" (care tin de algoritmica) care se gasesc la olimpiade, concursuri si pe infoarena, pentru ca au un mare overhead datorita obiectelor folosite pretutindeni (desi.. si aceste limbaje pot refolosi cod compilat sub forma de librarii sau pot imbrica cod C++ direct in sursa lor - Python cel putin sigur poate). Asa ca nu prea vad cum ar putea fi eficiente si pentru alte aplicatii mai greoaie, gen recursivitati, chestii cu vectori multi, arbori si alte computatii cpu-intensive. Aici (http://shootout.alioth.debian.org/) se poate vedea ca atat Python cat si Python 3.0 sunt way behind C++ pentru acest tip de operatii. Pentru arbori binari de ex, pot fi de 300 de ori mai lenti. Java, de ex, is doing a much better job, dar fiindca si el ruleaza intr-o masina virtuala, are de asemenea multe zone in care este si de 10 ori mai lent decat C/C++. Well, the rant's gotta end somewhere. Titlul: Răspuns: Yet another evaluator, wrote by me Scris de: Pripoae Teodor Anton din Mai 07, 2009, 17:58:29 Scuze pentru intarziere, dar am fost cam ocupat cu campionul, algoritmiada, pregatirea pt lot, etc. Am mai incercat odata, si se pare ca imi merge de data asta. Nu imi dau seama de ce nu a mers inainte, singura explicatie pe care o pot da, e ca am dezinstalat ruby 1.9 (the new ruby), din cauza unor probleme cu acesta, si acum am testat cu ruby 1.8.5. Voi mai incerca cand voi mai avea timp :). De vreo saptamana, m-am apucat sa scriu o interfata catre evaluatorul tau (practic un evaluator complet, care sa evalueze runde intregi), pe care l-am codat in ruby. Mai am putin si il termin. Dupa aceea il voi face public. Mai sunt mici probleme cu clasamentul (vreau sa fac toata treaba in bash). si cu borderourile finale, deoarece vreau sa fac borderouri cu toate joburile, si cu joburile fiecarui concurent.
Citat Trebuie sa-mi zici cum ai incercat sa rulezi programul din ruby, si cum arata acesta. Eu de exemplu am reusit sa evaluez un program facut in python. Pur si simplu l-am facut executabil (chmod +x) si i-am adaugat #!/usr/bin/python in header. And it worked. No blocked system calls of any kind. I'm wondering why it didn't with Ruby... Cod: [toni@centos-minimal-vm eval_alpha]$ cat work/adun Citat Apropo, limbajele "interpreted" (Python, Ruby, PHP, ...) au un mare deficit in a putea executa rapid cod pentru tipul de probleme "de informatica" (care tin de algoritmica) care se gasesc la olimpiade, concursuri si pe infoarena, pentru ca au un mare overhead datorita obiectelor folosite pretutindeni (desi.. si aceste limbaje pot refolosi cod compilat sub forma de librarii sau pot imbrica cod C++ direct in sursa lor - Python cel putin sigur poate). Legat de asta, stiu ca ruby poate merge mai incet decat alte limbaje (am incercat pe spoj cateva probleme), dar ruby1.9 (the new ruby), merge de aproximativ 2-3 ori mai rapid, si este destul de fun de codat in el. Revin cand termin evaluatorul. Chiar acum ma apuc de terminat micile buguri, si intr-o saptamana maxim il fac public. Titlul: Răspuns: Yet another evaluator, wrote by me Scris de: Pripoae Teodor Anton din Mai 07, 2009, 18:31:07 [LE] E deja prea mare postul anterior, asa ca scriu un nou post.
Am incercat sa rulez verificatorul cu --verif=prob/adun/verif, in care am scris: Cod: #!/bin/bash Apoi, deoarece mie imi dadea ceva de genul : Cod: [root@centos-minimal-vm eval_alpha]# python scripts/eval.py -p adun work/theexe -t 100 -m 16384 --verif=prob/adun/verif M-am uitat in /home/toni/bla_bla.txt si se pare ca afiseaza : Cod: [root@centos-minimal-vm eval_alpha]# cat /home/toni/bla_bla.txt Nu stiu de ce, dar se pare ca nu imi copiaza fisierul .ok :weightlift: Titlul: Răspuns: Yet another evaluator, wrote by me Scris de: Sanduleac Dan din Mai 07, 2009, 18:40:53 Pare interesant ce zici. Dar nu stiu de ce vrei sa te chinui in bash cu asta, este totusi un limbaj destul de limitat (desi.. evaluatorul meu a fost initial scris in bash, si apoi adaptat + re-codat in python).
Chiar sunt curios ce interfata faci. In orice caz, va fi amuzant ca eval-ul tau se va folosi de al meu care se foloseste de jrun :) Este un exemplu perfect de a crea un proiect pe baza codului modular, peste care se poate construi mai departe. Singura intrebare e.. ce planuri ai pentru un evaluator care sa evalueze runde intregi? Sa-l lansezi ca proiect Open Source sau sa-l propui asociatiei infoarena in schimbul eval-ului in PHP pe care-l folosesc ei acuma? Apropo, daca parsezi codul evaluatorului meu din al tau, poate ar fi mai bine sa introduc niste cod care sa omita culorile in output daca acesta este redirectat, ca nu prea isi au farmecul decat in terminal (stiu ca se putea cumva detecta asta), sau eventual niste optiuni gen -q, de la quiet, pentru a afisa doar scorul, borderoul fiind afisabil printr-un alt nou flag `-w fisier_borderou`. Spune-mi cum mai sta treaba si daca pot sa te ajut cumva. PS: ruby arata dubios, prefer python :) gets.chomp.to_i parca e nefiresc, mai degraba un int(f.readline().trim()) :D Titlul: Răspuns: Yet another evaluator, wrote by me Scris de: Pripoae Teodor Anton din Mai 07, 2009, 18:56:47 Pare interesant ce zici. Dar nu stiu de ce vrei sa te chinui in bash cu asta, este totusi un limbaj destul de limitat (desi.. evaluatorul meu a fost initial scris in bash, si apoi adaptat + re-codat in python). Chiar sunt curios ce interfata faci. In orice caz, va fi amuzant ca eval-ul tau se va folosi de al meu care se foloseste de jrun :) Este un exemplu perfect de a crea un proiect pe baza codului modular, peste care se poate construi mai departe. Evalul propriu-zis are 2.5 kilo :D (asta imi place la ruby, ca scrii cod folositor in foarte putine linii), si mai am cateva scripturi de bash (ca sa nu lucrez cu bash/system in ruby => e destul de naspa). Singura intrebare e.. ce planuri ai pentru un evaluator care sa evalueze runde intregi? Sa-l lansezi ca proiect Open Source sau sa-l propui asociatiei infoarena in schimbul eval-ului in PHP pe care-l folosesc ei acuma? Deocamdata nu am foarte multe planuri, intai sa-l vad ca merge, si dupaia voi vedea. In caz ca merge, il voi lansa Open Source. Ideea din spatele acestui eval, e ca de ceva timp, m-am gandit sa-mi fac propriul meu site de pb. Totul bun, am ales evalul facut de Mihai Patrascu, si am inceput sa testez cu el. Doar ca, nu stiu daca stii, acesta are niste mici probleme legate de memorie pe kernelurile noi (ulimit). Asa ca evalul tau a fost perfect pentru ce imi trebuia mie, si i-am facut o interfata asemanatoare cu cel vechi, folosit pe la ONI, campion si lot. Apropo, daca parsezi codul evaluatorului meu din al tau, poate ar fi mai bine sa introduc niste cod care sa omita culorile in output daca acesta este redirectat, ca nu prea isi au farmecul decat in terminal (stiu ca se putea cumva detecta asta), sau eventual niste optiuni gen -q, de la quiet, pentru a afisa doar scorul, borderoul fiind afisabil printr-un alt nou flag `-w fisier_borderou`. Spune-mi cum mai sta treaba si daca pot sa te ajut cumva. Suna interesant ce zici :D, eventual sa-i faci si un return code = punctaj obtinut, pt ca asa tre sa parsez destul de dubios borderoul. PS : Am atasat evalul (ce am facut din el pana acum) aici (http://infoarena.ro/utilizator/toni2007?action=download&file=eval_alpha.tar.gz&safe_only=false). Se ruleaza in felul urmator : "ruby grader.rb runda", pentru runde normale, sau "ruby grader.rb -- prob user", pentru a evalua userul user pe problema prob. Cod: [root@centos-minimal-vm eval_alpha]# ruby grader.rb Titlul: Răspuns: Răspuns: Yet another evaluator, wrote by me Scris de: Sanduleac Dan din Mai 07, 2009, 19:05:56 Ne-am sincronizat, ca sa vezi.
[raspuns la ultimul post] Ma bucur ca e chiar ce-ti trebuia :P Si da, as putea sa fac cu return code, sau sa implementez -q, care afiseaza doar scorul in stdout si iese (mi se par la fel de usor de parsat ambele alternative). O sa ma apuc sa modific aceste chestii cand apuc. Apropo, am pus o versiune noua a evalului, erau cateva linii cu buguri minore pe la verif, get your new copy off my account page ;) Edit :: acuma am vazut ca ai atasat eval-ul, o sa-l incerc cu prima ocazie. Chiar seamana cu cel al lui M Patrascu, nu l-am folosit pe acela niciodata dar recunosc "interfata". [la postul precedent] Pai uite cum sta treaba cu verif (probabil am facut eu helpul cam neclar): Programul verificator va primi trei parametri din partea lui eval.py, si anume cele trei fisiere (in-ul out-ul concurentului si (optional) ok-ul). El poate sau nu sa le foloseasca, dar nu poate cauta aceste fisiere in directorul curent dupa numele lor pur si simplu. Parametri: VERIF fisier.in fisier.out fisier.ok Returneaza: "mesaj\n(procent punctaj din max)" Exemplu: Gresit\n0 ; sau: OK\n100 Apropo, la "procent punctaj din max" cred ca ai inteles despre ce e vorba, dar ca sa nu fiu neclar, ideea era numarul este cat% din cat ar lua testul acela (adica, in principiu, 100puncte / numarul de teste) ii acorzi (si nu cat% din punctajul total pe problema). Pentru 10 teste, 100 acolo inseamna 10 puncte la scorul final care e maxim 100p. Asa.. Scriptul tau din bash zice ca nu gaseste `adun.ok` pentru ca nu se afla in directorul curent. Directorul din care e rulat verif-ul este un director temporar. Acolo se afla in-ul copiat pentru testul curent, out-ul returnat de sursa evaluata, si executabilul evaluat. Fisierul de ok insa nu e copiat acolo de evalul meu, este in directorul de teste. De aceea pasez acei parametri: ai sa vezi ca daca printezi $@ din bash vor aparea (inlocuieste si tu ? cu orice nr de test): Cod: /home/toni/Desktop/eval_alpha/tests/adun/?-adun.in /tmp/UNNUMEDUBIOS/adun.out /home/toni/Desktop/eval_alpha/tests/adun/?-adun.ok Mesajul 'Wrong answer in: adun.out' (si scorul) este doar preluat din out-ul verif-ului de catre eval.py si afisat acolo. Titlul: Răspuns: Yet another evaluator, wrote by me Scris de: Pripoae Teodor Anton din Mai 07, 2009, 19:43:17 Am uploadat versiunea noua a evalului, folosind versiunea noua a eval.py. Sa descriu cam cum functioneaza. Exista 2 moduri :
1. single job mode (user prob) In acest caz, se ruleaza ruby grader.rb -- prob stud. In directorul stud/$stud/ ar trebui sa existe sursa prob.ext, unde ext = c, c++, pas, pp (pas e pt gnu pascal, pp pentru free pascal). Dupa rularea eval.py, in directorul stud/$stud/ vor exista 2 fisiere, prob.tmp si prob-compile.tmp, in prima se afla borderoul, si in a doua se afla mesajul de compilare. Daca se evalueaza cu single job, se va afisa si outputul acestora in terminal. 2. round mode (round_name) Va trebui sa existe in directorul contest/ un director round_name, care va contine fisierul de configurare round_name-config.rb, care trebuie sa arate in felul urmator : Cod: # This is a sample configuration script for a round Evaluatorul va include scriptul, $probs si $studs ajungand variabile. Pentru fiecare problema, si fiecare student, se va rula single job, si se vor crea outputurile in stud/$stud/$prob.tmp si stud/$stud/$prob-compile.tmp. Acestea vor urma sa fie parsate la sfarsit pentru a se actualiza clasamentul. Pentru fiecare problema, va trebui sa existe un director prob/nume_problema, in care se vor afla 2 fisiere: params.rb, care va contine datele despre problema, si care trebuie sa arate in felul urmator : Cod: # This is the configuration file for problem adun verif, acesta poate fi orice binar sau script, care afiseaza "Mesaj\nProcent". In caz ca raspunsul este unic, se poate folosi verificatorul initial. Se poate scrie si un verificator in c++, dar trebuie compilat in binarul verif (g++ verif.cpp -o verif). Verificatorul standard :(este copyright by Mihai Patrascu, l-am luat din evaluatorul sau, si l-am adaptat). Cod: [root@centos-minimal-vm eval_alpha]# cat prob/adun/verif Now, the power of ruby (evaluatorul de 2.5 kb). Cod: [root@centos-minimal-vm eval_alpha]# cat grader.rb Titlul: Răspuns: Yet another evaluator, wrote by me Scris de: Pripoae Teodor Anton din Mai 07, 2009, 20:51:19 Am testat evaluatorul pe opensuse 11.1, care vine cu python 2.6, si imi iau urmatorul warning :
Cod: linux-g88s:/home/tuxdistro/Desktop/eval_alpha # ruby grader.rb test Titlul: Răspuns: Yet another evaluator, wrote by me Scris de: Sanduleac Dan din Mai 08, 2009, 14:42:54 Da, si eu am patit asta cand am upgradat la Ubuntu 9.04 care vine de asemenea cu Python 2.6. Foloseam o librarie veche, am schimbat de ieri acea bucata si am pus noul script pe pagina contului meu, dar am uitat sa mentionez.
Go get it (http://infoarena.ro/utilizator/sandyxp?action=download&file=eval.py) (poate ar trebui sa fac un fel de versioning, ca sa se reflecte schimbarile) Titlul: Răspuns: Yet another evaluator, wrote by me Scris de: Pripoae Teodor Anton din Mai 08, 2009, 16:00:26 Am terminat si scriptul care alcatuieste clasamentul si allres-ul, deci pot zice ca e gata evalul. Mai ramane de testat :). Am pus link pe profilul meu catre eval. Singura chestie care nu imi place, e ca afiseaza cu culori, si nu se vede bine cand deschizi borderoul cu un editor de texte. Ar merge treaba aia cu -q (quiet).
Titlul: Răspuns: Yet another evaluator, wrote by me Scris de: Sanduleac Dan din Mai 08, 2009, 20:21:18 Gata! Am facut schimbarile.
Acestea sunt modificarile, care sunt reflectate si in `eval.py --help`: [Changelog de la ver. 0.5 la 0.6] FEATURES: Doi noi parametri:
BUGFIXES: - elimina culorile daca stdout nu este un tty (adica daca redirectezi sau folosesti un pipe) Sa-mi zici cum merge ---------------------------------------------------------------------------------------- Apropo eval-ul tau are o mica buba. Cand il rulez prima data incearca sa stearga tot (dar i-au scapat directoarele, ca rm-ul a fost chemat fara -r :P) din propriul sau director. Asta se intampla la clear-all.sh, pt ca faci `cd work` si daca directorul work nu exista, va ajunge sa dea eroare si sa stearga tot din directorul curent... fixed: Cod: ################################################################################################################## Titlul: Răspuns: Yet another evaluator, wrote by me (current - 0.61 beta) Scris de: Pripoae Teodor Anton din Mai 09, 2009, 21:28:30 Da, asa e, dar nu vad de ce nu ar fi directorul work/. Acum nu prea am acces la eval :banana: (sunt la lot), dar o sa modific cand ma intorc :). Mersi de completare. Vezi si tu daca merge cu modificarile zise de tine (e ultima arhiva la mine pe profil).
Titlul: Răspuns: Yet another evaluator, wrote by me (current - 0.61 beta) Scris de: Sanduleac Dan din Mai 11, 2009, 07:47:48 Pai, cand am extras arhiva nu era :P Better safe than sorry, poate il sterge cineva si apoi se mira de ce i-a disparut eval-ul
Bafta multa la lot!!! Il voi da si eu la ora 2 Titlul: Răspuns: Yet another evaluator, wrote by me (current - 0.61 beta) Scris de: trip flip din Mai 11, 2009, 09:07:49 Felicitari pentru munca depusa! :DE dificil sa faci un evaluator? Stiu ca e mai greu de facut decat o problema. Cam cat ti-a luat?
Go on! :yahoo: Titlul: Răspuns: Yet another evaluator, wrote by me (current - 0.61 beta) Scris de: Sanduleac Dan din Mai 11, 2009, 20:56:55 Este un alt fel de programare. Nu e algoritmica, e "application development". In teorie un evaluator mai rudimentar se face rapid. Asa am inceput si eu, dar dupa aceea am tot adaugat features si am rezolvat diverse probleme ce tot apareau si ma incomodau. Am vazut si ca trebuia sa-l adaptez ca sa fie cat mai general, mai flexibil. Nu poti sa zici ca "ia mult", ci mai degraba ca este un proiect in continua dezvoltare, ca multe altele de acest gen.
Evaluatorul.. l-am inceput in alt limbaj cam acum 2 (3?) ani, l-am portat in python (pt ca era mult mai flexibil si mai productiv si imi inlatura anumite constrangeri) anul trecut, si l-am mai tot imbunatatit de cand l-am scris prima oara in python. Desi am lucrat la el doar din cand in cand, s-au adunat poate 1-2 saptamani de lucru mai consistent. Fiindca a fost folosit si de diriginta mea, si de mine, am avut si ocazia de a gasi mai multe buguri, pe langa faptul ca am primit si sugestii de imbunatatire, si astfel am reusit sa il aduc intr-o stare destul de stabila si user-friendly, zic eu. Well, multumesc pt incurajare :D Titlul: Răspuns: Yet another evaluator, wrote by me (current - 0.61 beta) Scris de: Pripoae Teodor Anton din Mai 12, 2009, 10:13:01 Citat Modificari de la versiunea 0.5 la 0.61 * NEW FEATURES -q afiseaza doar scorul in stdout -O fisier afiseaza doar scorul in stdout + scrie borderoul (fara culori) in acel fisier * BUGFIXES - elimina culorile daca stdout nu este un tty (adica daca redirectezi sau folosesti un pipe) Legat de scor, am reusit sa scot scorul in urmatorul fel : Cod: cat allres.txt | grep Punctaj | awk -F " " '{print $3}' > /tmp/score.tmp [LE] Am facut un install script pt jrun, si am atasat arhiva noua. Cod:
Titlul: Răspuns: Yet another evaluator, wrote by me (current - 0.61 beta) Scris de: Pripoae Teodor Anton din Mai 12, 2009, 11:27:38 Am facut un svn (https://opensvn.csie.org/eval/) pt eval (ca sa nu mai uploadez toata arhiva cand modific). Sursa se poate lua in felul urmator :
Cod: svn co http://opensvn.csie.org/eval/ eval Titlul: Răspuns: Yet another evaluator, wrote by me (current - 0.61 beta) Scris de: Sanduleac Dan din Mai 13, 2009, 06:53:38 Okay, i-am facut checkout. Nu am avut timp sa vad daca merge though :)
Titlul: Răspuns: Yet another evaluator, wrote by me (current - 0.61 beta) Scris de: Pripoae Teodor Anton din Mai 16, 2009, 17:35:32 Okay, i-am facut checkout. Nu am avut timp sa vad daca merge though :) Bun :). Cred ca am descoperit un bug. Cand sunt 10 teste, nu imi afiseaza punctajul pe test : Cod: Testul 1 OK time 0ms memory 12kb Execution successful. Cand sunt mai multe, imi afiseaza asa : Cod: Testul 1 Gresit 0 time 3ms memory 596kb Execution successful. N-ar trebui sa afiseze si scorul pe teste ? Titlul: Răspuns: Yet another evaluator, wrote by me (current - 0.62 beta) Scris de: Sanduleac Dan din Mai 17, 2009, 17:51:35 Nu e un bug. Afisarea scorului pe teste are loc doar cand in directorul de teste exista tests.txt, care indica exact cate puncte are fiecare test, ca sa se stie exact de unde vine punctajul. Altfel, scorul pe test este pur si simplu 100/nr_teste. tests.txt contine linii de tipul "i j", i fiind33*88 nr testului iar j punctele pt acel test.
Titlul: Răspuns: Yet another evaluator, wrote by me (current - 0.62 beta) Scris de: Sanduleac Dan din Mai 28, 2009, 20:31:22 Am postat in pagina mea "nightly buildul" noii versiuni care este "currently in development", pt toni.
Pentru ca am facut multe modificari si restructurari programului, care nu au fost inca finalizate (sau testate), acesta este inca o pre-versiune a versiunii 0.64 (hence the -13 de la revizia 13). Programul este backwards compatible cu 0.62. Una din functiile noi: afiseaza borderoul dupa cum mi-a cerut toni (hopefully). Folosire: consoleapp.py a inlocuit fostul eval.py. Rulati consoleapp.py. Pentru interfata de consola este nevoie de consoleapp.py si evalcore.py. Titlul: Răspuns: Yet another evaluator, wrote by me (current - 0.62 beta) Scris de: Pripoae Teodor Anton din Mai 28, 2009, 21:38:38 Am reusit sa termin in sfarsit evalul :). Varianta finala se gaseste aici (http://opensvn.csie.org/eval), si se poate lua cu urmatoarea comanda, din linux :
Cod: svn checkout http://opensvn.csie.org/eval eval Deocamdata, evalul suporta probleme normale (folosind evaluatorul scris de Dan), probleme de output-only si interactive, cu un eval scris de mine, putand evalua atat runde normale, cat si un singur user pe o singura problema (pt site-uri cu evaluator automat). In caz ca se arata cineva interesat, voi scrie un hotwo pt instalare si folosire. Titlul: Răspuns: Yet another evaluator, wrote by me (current - 0.61 beta) Scris de: Alexandru Pana din Iunie 11, 2009, 14:57:08 Este un alt fel de programare. Nu e algoritmica, e "application development". Nu te supara, dar nu ma pot abtine: nu exista alt fel de programare. Toate programele sunt 'algoritmica'. In rest, pare simpatic evaluatorul tau, spor in continuare. Titlul: Răspuns: Yet another evaluator, wrote by me (current - 0.62 beta) Scris de: Pripoae Teodor Anton din Iunie 11, 2009, 20:13:57 Nu e adevarat :). Sunt unele aplicatii pentru care nu trebuie sa stii deloc algoritmi: applets, scripturi, si alte programe care sunt utile inainte de a fi eficiente.
Titlul: Răspuns: Yet another evaluator, wrote by me (current - 0.62 beta) Scris de: Alexandru Pana din Iunie 12, 2009, 09:21:01 Uite un citat de pe wiki: "In mathematics, computing, linguistics, and related subjects, an algorithm is a finite sequence of instructions, an explicit, step-by-step procedure for solving a problem, often used for calculation and data processing."
Algoritmul nu implica eficienta si nu exclude pragmatismul. Orice succesiune finita de instructiuni aplicata la rezolvarea unei probleme se numeste algoritm. Fie ca e o carte de bucate, applet sau engine-ul grafic al unui joc. Algoritm nu inseamna doar "Algoritmul lui X" cu o complexitate cat mai mica. Titlul: Răspuns: Yet another evaluator, wrote by me (current - 0.62 beta) Scris de: Sima Cotizo din Iunie 12, 2009, 09:29:53 Discutia devine offtopic. Daca ar fi sa ne luam de exprimari, sunt tare curios daca ai auzit de "algoritmul de prajit cartofi"...
Titlul: Răspuns: Yet another evaluator, wrote by me (current - 0.62 beta) Scris de: Alexandru Pana din Iunie 12, 2009, 09:33:48 Discutia devine offtopic. Daca ar fi sa ne luam de exprimari, sunt tare curios daca ai auzit de "algoritmul de prajit cartofi"... Da, am auzit chiar si de algoritmul de prajit oua. Vrei sa facem si paine? Titlul: Răspuns: Yet another evaluator, wrote by me (current - 0.62 beta) Scris de: Sima Cotizo din Iunie 12, 2009, 09:59:12 Discutia devine offtopic. Daca ar fi sa ne luam de exprimari, sunt tare curios daca ai auzit de "algoritmul de prajit cartofi"... Da, am auzit chiar si de algoritmul de prajit oua. Vrei sa facem si paine? Consider ca te indepartezi mult. Poti deschide topic nou in sectiunea offtopic. Alte mesaje scrise aici pe tema asta iti vor fi sterse. Titlul: Răspuns: Yet another evaluator, wrote by me (current - 0.64 rc1) Scris de: Sanduleac Dan din Iunie 12, 2009, 12:55:30 Am actualizat primul mesaj pentru a reflecta noua versiune, 0.64 rc1.
Mie mi se pare stabila, dar nu am avut posibilitatea de a o testa foarte mult. Daca gasiti buguri, va rog raportati :) Aceasta versiune introduce cateva adaugiri si schimbari nu neaparat majore. In schimb, a fost reorganizata masiv, in materie de cod, fata de 0.62, pentru a fi mai usor de dezolvat si mai usor de refolosit intr-un proiect mai amplu. 0.64 este backwards compatible cu 0.62 in ceea ce priveste parametrii pe care ii primeste si fisierul de configurare, insa afisarea a fost modificata pentru a arata mai prezentabil. Una dintre schimbarile importante a fost separarea codului de evaluare de codul de "interfata" de consola. De aici a reiesit in mod natural reorganizarea aplicatiei pe mai multe fisiere. Prin aceasta, am putut apoi cu usurinta incepe dezvoltarea unei interfete grafice folosind GTK si Python. (puteti sa o incercati prin rularea guiapp.py) Titlul: Răspuns: Yet another evaluator, wrote by me (current - 0.64 rc1) Scris de: Savin Tiberiu din Iunie 27, 2009, 15:21:18 Ai pus pe svn ultimele modificari? si toate fisierele? ca eu nu gasesc config.py si nici guiapp.py. Am incercat sa evaluez si eu o problema cu consoleapp.py si nu mi-a mers zicand ca nu gaseste directorul cu teste, si nu prea stiu cum il setez. Vroiam si eu sa fac ceva dev la evalu asta, de fapt vroiam sa fac si eu o interfata gui numai ca vroiam sa o fac in Java folosind swing.
Titlul: Răspuns: Yet another evaluator, wrote by me (stable - 0.64 rc1; dev - 0.65) Scris de: Sanduleac Dan din Iunie 27, 2009, 16:33:04 Merge sa-i faci o interfata swing, daca rulezi evalul din Jython din cadrul lui java, in loc sa folosesti CPython care e "default".
In legatura cu lipsa fisierelor, nu stiu ce sa zic ca s-a intamplat, daca intru din browser pe acel link vad toate fisierele prezente. config.py trebuie sa contina doar linia: TestDBRoot = 'o cale pentru directorul de teste' pentru ca evalul sa functioneze. Dar mi se pare ciudat ca nu gasesti fisierele, nu iti apar cand intri aici ? http://informatrix.ro/svn/eval2/tags/stable-0.6/ (http://informatrix.ro/svn/eval2/tags/stable-0.6/) Titlul: Răspuns: Yet another evaluator, wrote by me (current - 0.64 rc1; dev - 0.65) Scris de: Sanduleac Dan din Iunie 27, 2009, 18:50:57 Am scos versiunea 0.65 cu niste modificari mari la structura programului si cateva bugfixuri. De asemenea am modificat guiapp sa foloseasca output generat de consoleapp pentru fereastra de 'log' a sa. Well, pe cine intereseaza :)
Aceasta versiune este inca netestata, si am creat un branch special pt ea, in general pentru ultima versiune a programului care este cat de cat stabila, 'testing'. Puteti s-o descarcati prin svn: svn co http://informatrix.ro/svn/eval/eval2/branches/testing-0.6 eval2-testing CHANGELOG-ul e in directorul aplicatiei, sau puteti sa-l accesati direct la adresa aceasta (http://informatrix.ro/svn/eval/eval2/branches/testing-0.6/CHANGELOG) Apropo, devil, daca mai vrei sa dezvolti in java un GUI, ultimul release 'stable' nu va merge cu Jython. Merge in schimb versiunea 0.65 de sub testing Titlul: Răspuns: Yet another evaluator, wrote by me (current - 0.62 beta) Scris de: Andrei Misarca din August 26, 2009, 14:18:15 In caz ca se arata cineva interesat, voi scrie un hotwo pt instalare si folosire. Ar merita sa scri si un howto. Eu cel putin chiar sunt interesat cum se foloseste :D Titlul: Răspuns: Yet another evaluator, wrote by me (current - 0.64 rc1) Scris de: Sanduleac Dan din August 26, 2009, 14:30:04 Am impresia ca proiectele noastre (al meu si al lui toni) au cam stagnat. Cu toate astea, ambele erau functionale ultima data cand am verificat.
http://informatrix.ro/svn/eval/eval2/branches/testing-0.6 (http://informatrix.ro/svn/eval/eval2/branches/testing-0.6) - cred ca uitasem sa actualizez linkul catre svn-ul meu, s-a schimbat. Titlul: Răspuns: Yet another evaluator, wrote by me (current - 0.64 rc1) Scris de: Andrei Misarca din August 26, 2009, 14:37:15 Ambele fiind functionale, cred ca ar merge scris un ghid de folosire :)
Titlul: Răspuns: Yet another evaluator, wrote by me (current - 0.64 rc1) Scris de: Pripoae Teodor Anton din August 27, 2009, 19:42:31 L-am scris in graba, e posibil sa mai fie ceva greseli (http://bitbucket.org/toni/eval/wiki/Home).
Titlul: Răspuns: Yet another evaluator, wrote by me (current - 0.64 rc1) Scris de: Andrei Misarca din August 28, 2009, 19:19:21 Good job Toni ! =D>
Insa cand ii dau comanda Cod: ./scripts/add-contest mycontest iar add-problem nu am vazut niciun script sau executabil pe acolo :) Si de asemenea nu am gasit niciun executabil grader :) Titlul: Răspuns: Yet another evaluator, wrote by me (current - 0.64 rc1) Scris de: Pripoae Teodor Anton din August 28, 2009, 23:17:36 Am uitat sa pun ultima versiune :-', scrisesem tutorialul si apoi am adaugat scripturile pt add-contest si add-problem. Iar in loc de grader este grader.rb :).
LE : Am modificat, si am updatat si in wiki. Daca iei acum ultima versiune a sursei de pe site, va merge. Titlul: Răspuns: Yet another evaluator, wrote by me (current - 0.64 rc1) Scris de: Andrei Misarca din August 29, 2009, 09:32:37 Merge :winner1:
Este posibil ca la o problema sa existe si un eval, si daca da cum trebe facut? Titlul: Răspuns: Yet another evaluator, wrote by me (current - 0.64 rc1) Scris de: Pripoae Teodor Anton din August 29, 2009, 15:21:12 Sigur, inlocuiesti fisierul judge din directorul problemei cu alt fisier (script sau executabil) cu numele "judge", care va primi ca parametrii "fisier.in fisier.out fisier.ok", si va afisa raspunsul sub forma : "mesaj\n(procent punctaj din max)" (ex : "gresit\n0" sau "ok\n100"), asta pentru problemele classical, iar pentru cele output only de forma "mesaj\npunctaj" (ex : "gresit\n0" sau "ok\n10"). Pentru cele interactive este mai greu, pt ca in eval este de fapt hardcodat pipe-ul cu procesul, si e destul de greu de modificat pentru cineva care nu prea stie chestii de genul "fork", "pipe", etc. Am sa scriu un tutorial cand voi avea timp.
Titlul: Răspuns: Yet another evaluator, wrote by me (current - 0.65 in svn only) Scris de: Sanduleac Dan din Septembrie 01, 2009, 15:58:15 @toni: Te-as sfatui sa schimbi in evalul tau folosirea fisierelor temporare cu nume unic
Ca idee, de ex daca doi useri lucreaza pe acelasi calculator cu evalul tau, unul dintre ei va crea fisierul temporar nush care, iar celalalt va primi frumos access denied pe acel fisier din momentul acela incolo. Asadar, foloseste `mktemp` ca sa creezi un fisier temporar cu nume random, si sterge-l dupa folosire. (comanda iti returneaza numele fisierului generat) Asa, si 2: Dupa ce rulezi evalul tau, va modifica (adica suprascrie probabil) niste fisiere care nu au ce cauta acolo de la bun inceput (acolo, adica in repository). Dupa ce le modifica, daca vrei sa faci commit, le tragi dupa tine pe alea modificate degeaba. Ma refer la Cod: M contest/test/allres.txt Edit: inca ceva, pentru runde mai bine nu zici decat numele problemelor, iar utilizatorii sa fie sub forma de foldere cu numele lor intr-un director de utilizatori, evaluatorul evaluand automat pe toti userii dintr-un folder dat, pe acele probleme. (mai flexibil asa) Titlul: Răspuns: Yet another evaluator, wrote by me (current - 0.65 in svn only) Scris de: Pripoae Teodor Anton din Septembrie 01, 2009, 19:48:02 Eu lucram oricum cu evaluatorul in alt director, deci nu aveam probleme cu rularea. Oricum o sa pun in .hgignore acele fisiere. Legat de mktemp, n-am mai facut un alt release la eval (e tot versiunea 0.91), am tot zis ca modific, dar n-am avut timp. Nu pot pune sa evalueze un director intreg, pt ca astfel ar evalua toti concurentii, iar daca am userii de la 2 concursuri ar evalua tot.
Titlul: Răspuns: Yet another evaluator, wrote by me (current - 0.65 in svn only) Scris de: Sanduleac Dan din Septembrie 02, 2009, 12:06:41 Nu pot pune sa evalueze un director intreg, pt ca astfel ar evalua toti concurentii, iar daca am userii de la 2 concursuri ar evalua tot. da, dar poti sa separi de la bun inceput utilizatorii in directoare corespunzatoare concursului, care sa nu fie neaparat in dir unde e evalul tau, ci oriunde. Chiar si daca ar fi in acelasi dir, poti avea cv gen "stud/<round_name>/<username>/..." si aclo sa fie sursele. Titlul: Răspuns: Yet another evaluator, wrote by me (current - 0.65 in svn only) Scris de: Sanduleac Dan din Septembrie 09, 2009, 14:45:04 Un ghid incepe sa fie publicat pentru evaluatorul meu aici: http://bitbucket.org/dan.sanduleac/eval2/wiki/Home (http://bitbucket.org/dan.sanduleac/eval2/wiki/Home)
Evaluatorul meu e cel pe care se bazeaza cel facut de toni, al lui implementand in plus fata de al meu posibilitatea evaluarii de runde intregi (mai multi utilizatori, mai multe probleme de-odata, totul automat). Momentan, in ghidul meu nu apar decat o introducere simpla si putine detalii de implementare, un "Cum se foloseste" urmand a fi scris in curand. Oricum, daca sunteti interesati, probabil veti folosi mai degraba interfata facuta de toni pentru ca ofera mai multe functii ;) In schimb, daca vreti sa stiti cum functioneaza ambele evaluatoare, ghidul acesta va va ajuta mult |