Afişează mesaje
Pagini: 1 [2]
26  infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: Viteza de calcul : Aprilie 13, 2009, 20:03:06
Hey, da, e interesant ca iti ignora daca nu folosesti ulterior variabila. Nu ma prindeam de ce merge asa de repede!
27  infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: Yet another evaluator, wrote by me : Aprilie 13, 2009, 20:00:49
Much appreciated. Chiar eram nedumerit unde sa-l incadrez, deci iti multumesc Very Happy
So, unde ai gasit timp sa mai si rasfoiesti infoarena la ONI ? Intriguing

Sper sa mai vada si alta lume threadul Smile Sau poate chiar au toti cate un evaluator bun, scris de ei, la purtator. Mai stii ?  Thumb up
28  infoarena - concursuri, probleme, evaluator, articole / Informatica / Yet another evaluator, wrote by me (0.65 stable) : 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, 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


Cum îl punem pe roate:

1) Facem rost de evaluator
     
  • (recomandat) Îl descărcăm direct de pe bitbucket, intrând pe pagina de download şi descărcând o arhivă a versiunei dorite, de jos unde scrie "Tags and snapshots". "tip" înseamnă ultima versiune de dezvoltare, care ar putea fi instabilă.

  • Sau îl preluăm prin mercurial (îl obţineţi executând apt-get install mercurial pe Ubuntu, yum install mercurial pe Fedora/Red Hat/SUSE), folosind comanda:
    hg clone http://bitbucket.org/dan.sanduleac/eval2
    Dacă vreţi ultima versiune stabilă în locul celei instabile, rulaţi hg update 0.65 (înlocuind 0.65 cu ultima versiune apărută).
  • Prin subversion, folosind comanda:
    "svn co http://informatrix.ro/svn/eval/eval2/tags/stable-0.6 eval2"

Ce obtinem in orice caz va fi un director numit eval2 (daca l-ati descarcat de pe aceasta pagina, extrageti arhiva).

2) Creăm o legatură simbolică pentru a-l putea apela de oriundeSă presupunem că directorul eval2 se află in "/home/utilizator/".
Apelăm următoarea comandă, înlocuind calea până la eval2 cu cea adevarată:
ln -s /home/utilizator/eval2/evaluator.py /usr/local/bin/

3) Facem rost de jrun (este ataşat la sfârşitul mesajului, sau disponibil pe aici, în pagina de downloads a proiectului)Extragem arhiva, si din directorul 'jrun' nou creat, scriem comenzile "make" si apoi "sudo cp jrun /usr/local/bin".


4) Configuram evaluatorul prin editarea config.py
-- notă -- De la versiunea 0.65 înainte, copiaţi config.py.example în config.py şi apoi editaţi-l.
Deschidem config.py cu un editor si cautam variabila TestDBRoot. O modificam sa reflecte un director gen /home/utilizator/teste/, in care vom pastra 'baza de date' de probleme.

(Un director cu numele problemei in care intra testele si eventual un fisier de configurare este de ajuns pentru a evalua apoi acea problema. Pentru fiecare problema, acest director trebuie sa se gaseasca undeva in baza de date de probleme.)

5) Creăm directorul de testeExemplu: "mkdir ~/teste".
Apoi punem probleme in directorul de teste, si folosim evaluatorul ca sa le evaluam.

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
unde 'Cheie' este una din urmatoarele: time, memory, inf, outf
iar 'Valoare' este .. va prindeti voi ;)
Precizari:
  • Memoria se precizeaza in KB
  • Limita de timp se precizeaza in milisecunde
  • Formatul fisierului de intrare/iesire preluat din variabilele inf/outf trebuie sa contina anumite caractere/grupuri de caractere care vor fi inlocuite:
    %s va fi inlocuit cu numele problemei
    ? va fi inlocuit cu numarul testului
    Astfel: daca am teste gen sum1.in si sum1.out (in-ul si ok-ul), atunci voi adauga urmatorii doi parametri in fis. de config.:
    inf=%s?.in
    outf=%s?.out



"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:
  • evaluator.py executabil_de_evaluat --prob whatever
  • Daca insa ar putea fi mai multe probleme cu acest nume in baza de date cu testele problemelor, evaluatorul nu stie exact la care problema ne referim (si o va lua pur si simplu pe prima pe care o gaseste, specificand pe care, desigur). In acest caz, putem fi mai expliciti:
    evaluator.py executabil_de_evaluat --prob ONI/whatever sau evaluator.py executabil_de_evaluat --prob ONI/2009/whatever
    intelegeti unde vreau sa ajung ?:)
Toate aceste formate de specificare a problemei functioneaza pentru a gasi acea problema. Primul exemplu gaseste problema whatever care este undeva in directorul ONI, iar al doilea e si mai specific, gaseste problema whatever care se afla undeva in directorul ONI/2009.
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
Evaluez problema `/home/dan/teste/ONI/2008/11-12/virus'
Numele problemei: virus
[config-file] memory=64000
[config-file] time=500
[config-file] groups=0-2,4-6
Test   Score Group Time       Memory     Verdict
------ ----- ----- ---------- ---------- -------------
0      10    ↓     10ms       1100kb     OK
1      0     ↓     10ms       1476kb     Wrong Answer
2      10    0     30ms       2108kb     OK
3      0     0     190ms      16984kb    Wrong Answer
4      10    ↓     370ms      26976kb    OK
5      10    ↓     200ms      16816kb    OK
6      10    30    410ms      33056kb    OK
7      0     0     210ms      17040kb    Wrong Answer
8      0     0     20ms       3076kb     Wrong Answer
9      0     0     10ms       1768kb     Wrong Answer
------ ----- ----- ---------- ---------- -------------
Total        30
dan@Core:surse$

Comentarii si sugestii sunt binevenite



Descarcă jrun.zip
29  infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: Calcularea functiei phi(N) folosind Ciurul lui Eratostene : Aprilie 03, 2008, 20:36:01
0.4 sec pe 1 milion vs 1 sec Smile
"ciurul" lui pauldb bate Very Happy
30  infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 678 Talharie : Martie 23, 2008, 23:28:15
Incearca cu metoda turneului (eu acuma am auzit de ea - luai 90-100 cica.. misto metoda Very Happy).
Meanwhile back to me and my problems.. Smile anyone ?
31  infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 678 Talharie : Martie 23, 2008, 20:35:59
sal everybody. mor aici Smile  Brick wall
Am folosit ca exemplu sursa mea de la password din arhiva pt aceasta problema, in care fac un fel de kmp (numai ca facand operatii doar pe substring cum ar veni..) - rez in O(n)
Scurta explicatie:
La fiecare moment am o pozitie din care banuiesc ca va incepe cea mai mica rotatie, si de la acea pozitie pana la pasul curent din sirul analizat (cel alcatuit din input+input) imi construiesc la fiecare pas cate putin vectorul overlap, sau pi, sau cum ii zice, de la kmp Smile.
Vad daca pot sa micsorez si mai mult acesta rotatie presupusa minima pastrand din ea doar cel mai lung sufix comun cu prefixul, peste care vin cu un caracter mai mic decat cel care urma imediat dupa prefix.
Problema e ca aici nu pot pastra decat anumite rotatii circulare care sunt conform regulii cu k, asa ca am zis ca daca gasesc o rotatie mai mica lexicografic decat cea presupusa, merg mai departe gasind si rotatii mai mici dar nu o salvez decat daca acea rotatie se poate obtine prin salturi de cate k.

Pare corect, totusi iau 0, numai WA for test in `seq 1 10` si nu stiu de ce. Pareri ?
32  infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: Linux : Februarie 14, 2008, 15:12:25
g++ si gcc fac parte din acelasi proiect, au relativ aceleasi optiuni.. Dar exista niste diferente, g++ in primul rand are STL .. Pe langa asta mai sunt alte diferente, cum ar fi posibilitatea de a declara variabile in cadrul buclelor ( for (int i = 0; ...) ) care in gcc nu merg.. sau a scrie c${header} in loc de ${header}.h la include.
Oricum, ideea e ca cele doua compileaza diferit, nu sunt acelasi executabil.
Chiar si in pagina de man, zice asta si apar si optiunile/flagurile separate (bine, o parte) care merg doar la unul din ele.
Compilatorul C++ (g++) se foloseste (poate pe langa altele) mai ales de libstdc++
(ex: libstdc++6                            4.2.1-5ubuntu4                      The GNU Standard C++ Library v3)
33  infoarena - concursuri, probleme, evaluator, articole / preONI 2008 / Răspuns: Gather : Decembrie 16, 2007, 10:08:20
ok nu am o intrebare.. dar cer o mica clarificare Smile ai zis mai devreme ca pot exista mai multi detinuti intr-o celula.
Citat
Restrictii

    * 1 ≤ N ≤ 750
    ....
    * Nu vor exista mai multi detinuti in aceeasi celula
Deci ?
34  infoarena - concursuri, probleme, evaluator, articole / preONI 2007 / Răspuns: Branza : Iunie 25, 2007, 10:57:39
exemplul este gresit..
produce in ziua a 3-a doar 7 ... nu 12.
daca in ziua a patra el produce cele 5 "bucati" de branza sau cum le-o zice, si plateste taxa de depozitare 3*1*10=30, iar de-abia in ziua a 5-a nu mai produce nimic si foloseste cele 3 branz..e din depozit, si plateste inca 3*1*10=30, atunci costul final va fi 483.

Later edit: da, pai la unii 5*45 face 180 ..  Brick wall
35  infoarena - concursuri, probleme, evaluator, articole / preONI 2007 / Răspuns: Gradina : Iunie 25, 2007, 08:32:41
In enunt nu se specifica daca oricare din cele doua poligoane convexe, formate de cele 2 submultimi disjuncte de tarusi, trebuie sa aiba toti tarusii ca varfuri ale poligonului, sau pot contine si tarusi in interiorul poligonului.
Pot fi tarusi si in interiorul oricareia dintre poligoane ?
36  infoarena - concursuri, probleme, evaluator, articole / preONI 2007 / Răspuns: s-au afisat problemele? : Martie 25, 2007, 08:09:35
s-a mai intamplat o data sa incepem la si 15 .. hai treaca, asteptam Smile
37  infoarena - concursuri, probleme, evaluator, articole / Unirea 2007 / Raspuns: Maxsecv : Ianuarie 27, 2007, 14:35:27
Vectorul e circular?
Cu alte cuvinte, daca am 11100000111, fara a face cut&paste-ul descris in enunt, ce am acolo se poate considera subsecventa de 6 biti de 1?
38  Comunitate - feedback, proiecte si distractie / Feedback infoarena / Raspuns: Bug reports : Decembrie 17, 2006, 21:54:51

Mersi, tocmai pe aia eram, deja incepeam sa configurez.
Apropo bugul pe care l-am scris mai sus se pare ca avea deja un ticket, si am si aflat cum sa scap de el.
39  Comunitate - feedback, proiecte si distractie / Feedback infoarena / ups marele script.. : Decembrie 17, 2006, 21:01:16
Citat
Uite jucandu-ma eu in wiki-ul asta, am dat din greseala ceva de genu "Muta pagina" - la pagina principala a contului meu (sandyxp). Si i-am dat sa o mute catre "sanduleac_dan", era un link acolo sus, ca tot nu stiam ce face exact. Si a mutat pagina mea principala, editabila.. (needitata inca).. si pe langa faptul ca nu mai e deloc, nicaieri.. Very Happy :
Acuma cand intru pe http://infoarena.ro/utilizator/sandyxp imi dau niste erori urate de php, probabil s-a sters pagina aia de pe contul meu (nu imi dau seama de ce nu ar fi creat wiki-ul una noua in loc), iar http://infoarena.ro/utilizator/sanduleac_dan => utilizatorul nu exista (ma asteptam sa vad macar pagina goala implicita, ca tot nu imi dau seama unde a mutat-o..)  Whistle

Cod:
Fatal: >>>Error: Assertion failed in function controller_user_view file www/controllers/user.php line 33<<<
Printing full backtrace:
Backtrace Level 1: function log_error file common/log.php line 133
Backtrace Level 2: function log_assert file common/log.php line 179
Backtrace Level 3: function controller_user_view file www/controllers/user.php line 33
Backtrace Level 4: file www/index.php line 163

Pseudo-later-edit: Initial trimisesem mesajul catre un admin, dar cum nu mi-a raspuns inca si vazand threadul de bug reports, am zis sa-l pun aici. Am observat ulterior ca avem aici frumusel toate sursa la wiki si posibilitatea sa o dezvoltam..
Si, btw cum iau repository-ul de pe net? am vazut ca e o interfata pt web browsing la trunk numit "trac" , dar nu m-am prins inca daca pot descarca toata chestia cu clientul de cvs sau subversion sau trebuie altceva..

M-as baga si eu la bug fixing, stiu php (si mysql - ceva acolo). Adminii care vad mesajul asta si ma vor sa-i mai ajut si eu, feel free to contact me, cei care nu vad, daca e le dau mesaj.  Thumb up
Pagini: 1 [2]
Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines