Post-Happy-Coding

Cosmin
Cosmin Negruseri
24 noiembrie 2007

Concursul Happy Coding s-a incheiat, si a fost unul de succes, facand ca traficul de pe site sa se dubleze. Mugurel si restul echipei de propunatori au facut treaba buna, propunand un numar impresionant de probleme, iar acum tot Mugurel ne prezinta o analiza la rece a concursului:

A mai trecut un concurs Happy Coding si s-ar putea spune ca incepe sa devina un concurs infoarena traditional. Daca in primul an (2005) toate problemele au fost luate de la concursurile de selectie a echipelor ACM ICPC din Universitatea Politehnica Bucuresti, incet-incet Happy Coding a ajuns sa aiba parte de portia sa proprie de probleme originale si interesante ;) Editia de anul acesta a reprezentat cel mai lung concurs infoarena si a avut cel mai mare numar de probleme (25). Ca si in anii anteriori, evaluatorul a fost pornit pe toata durata concursului, dar, pentru a "contrabalansa" aceasta facilitate, am stabilit ca la fiecare problema sa se poata obtine doar 0 sau 100 de puncte. In felul acesta, Happy Coding a devenit mai asemanator cu concursurile de tip ACM ICPC decat cu olimpiadele scolare - mie personal imi plac mai mult concursurile de tip ACM ICPC, datorita clasamentului "live" si a dinamismului mai ridicat. Apropo de clasament "live", a existat un "curent de opinie" la IOI anul acesta, conform caruia ar trebui sa existe un fel de clasament semi-live si la IOI (sa vedem ce se va intampla in viitor :) ).

Problemele au avut nivele de dificultate variate, rezolvarile lor necesitand observatii, idei si smenuri simple si/sau cunoscute, precum si idei noi, complicate si dificil de gasit. Imi era clar ca, desi durata concursului era de peste 8 zile si jumatate, ar fi fost foarte greu pentru cineva sa rezolve toate problemele. De aceea consider remarcabil rezultatul lui bogdan2412Bogdan-Cristian Tataroiu bogdan2412, care a reusit sa rezolve 24 din cele 25 de probleme (oare cat timp va dura pana va rezolva cineva si problema Optic , chiar si cu solutia publicata ? :) ) si a luat concursul in serios de la bun inceput, situandu-se pe unul din primele 2 locuri inca din prima zi de concurs.

In ceea ce priveste rezultatele celorlalti concurenti, eu le-as incadra in 7 (numar magic) categorii, in functie de numarul de probleme rezolvate:

  • cat.1: 23-25 probleme rezolvate => rezultat excelent
  • cat.2: 21-22 probleme rezolvate => rezultat foarte bun
  • cat.3: 16-20 probleme rezolvate => rezultat bun
  • cat.4: 11-15: probleme rezolvate => rezultat ok
  • cat.5: 7-10 probleme rezolvate => rezultat satisfacator
  • cat.6: 3-6 probleme rezolvate => mai are mult de lucrat si multe de invatat (dar are potential ;) )
  • cat.7: 0-2 probleme rezolvate => in trecere pe la concurs :)

Desi speram ca cei mai multi concurenti (45%-50%) sa se claseze in categoriile 1-5, o scurta privire aruncata asupra clasamentului arata ca lucrurile nu au stat astfel, aproximativ 75% dintre participanti situandu-se in categoriile 6 si 7 :( . Din acest punct de vedere, sunt usor dezamagit si am incercat sa ma gandesc care ar fi motivul pentru care cea mai mare parte a participantilor a rezolvat foarte putine probleme. Mi-au trecut prin minte 3 motive posibile:

  • Au luat mult prea la propriu ideea de "programare cu zambetul pe buze" si au tratat concursul cu o foarte mare lejeritate. Presupun ca aceasta reprezinta o posibilitate, insa atunci sunt curios ce anume i-a facut sa zambeasca in timp ce programau. Pe mine ma face sa zambesc un program bine scris care obtine 100 de puncte :)
  • Au rezolvat mai multe probleme, insa nu in proportie de 100%, iar sistemul de punctare "0 sau 100" nu i-a avantajat in aceasta privinta. Este posibil ca lipsa de experienta in ceea ce priveste concursurile de informatica sa nu permita unui participant sa isi gaseasca bug-urile din surse sau sa inteleaga motivele pentru care algoritmul sau nu functioneaza nici chiar intr-un interval de peste 8 zile si jumatate.
  • Nivelul de dificultate al problemelor a fost prea ridicat (ceea ce este evident pentru o parte dintre probleme) si nu au reusit sa gaseasca o solutie corecta sau care sa respecte constrangerile de timp si de memorie impuse.

Dintre cele 3 motive mentionate, primul se poate "rezolva" tratand concursurile mai serios, iar al doilea se poate "rezolva" programand mai mult si capatand experienta. A treia cauza posibila este cea care ma ingrijoreaza cel mai mult si este si cea mai dificil de "tratat" in mod individual (fara ajutorul cuiva). Pentru a ajunge sa poti rezolva probleme grele, in afara de a te stradui mai mult de unul singur, este important sa poti invata ceva si de la ceilalti. De aceea, am incercat sa scriu un articol cu solutiile problemelor cat mai detaliat, pentru a ajuta astfel pe toata lumea sa invete cateva (sau mai multe :) ) idei noi.

In perspectiva concursurilor viitoare, intrucat nu exista o reteta sigura pentru a ajunge in situatia de a iti veni (cine stie de unde :) ) ideile necesare pentru a rezolva o problema, pot doar sa va sugerez sa luati in considerare urmatoarele posibilitati:

  • ganditi-va singuri (fara a cere ajutor) la fiecare problema, pana cand gasiti solutia sau pana cand trece o anumita perioada de timp dupa care considerati ca nu puteti gasi solutia singuri (aici depinde de fiecare.. ar trebui sa fie cel putin 1-2 saptamani, dar mie mi s-a intamplat sa ma prind cum sa rezolv o problema si dupa 6 ani :) )
  • comunicati cu ceilalti membri ai comunitatii, schimband idei, discutand algoritmi si cerand sfaturi; si tineti minte sa ii ajutati si voi pe altii atunci cand veti avea posibilitatea
  • faceti pregatire cu un profesor care se pricepe; e foarte util pentru voi sa va ofere cineva informatii si cunostinte intr-un mod structurat (sa stiti ca asta nu e o reclama la adresa mea :) va spun doar ce mi se pare mie util si ce am facut si eu cand eram elev)
  • cititi cursuri de Computer Science, Graph Theory, Computational Geometry, Data Structures, String Algorithms, etc. si articole de cercetare de pe Internet; veti gasi multe concepte si idei foarte interesante, care s-ar putea sa va "lumineze" un pic mintea :)
  • participati la cat mai multe concursuri; chiar daca va prindeti cum sa rezolvati o problema, este important sa implementati corect si repede algoritmul de rezolvare

Daca are cineva si alte sugestii (sau nu este de acord cu unele din cele mentionate), il invit sa comenteze in sectiunea de comentarii.

Mult succes la concursurile urmatoare!

Categorii:
remote content