Afişează mesaje
|
Pagini: 1 [2]
|
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 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 ?
|
|
|
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 aiciCum î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 oriunde | | Să 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 teste | | Exemplu: "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: 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: 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 testeEvaluatorul 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: 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
|
|
|
31
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 678 Talharie
|
: Martie 23, 2008, 20:35:59
|
sal everybody. mor aici 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 . 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)
|
|
|
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 ..
|
|
|
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 ?
|
|
|
39
|
Comunitate - feedback, proiecte si distractie / Feedback infoarena / ups marele script..
|
: Decembrie 17, 2006, 21:01:16
|
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.. : 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..) 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.
|
|
|
|