Pregătirea unui concurs

From Algopedia
Revision as of 14:19, 8 October 2017 by Cata (talk | contribs) (Calendar)

Jump to: navigation, search

Regulament intern al comisiei

  • Unii membri nu vor avea drept de vot. Fără a jigni pe nimeni, nu toți dorim același lucru de la un concurs, iar asta se reflectă în voturile pe probleme. Unii vor să arate ce probleme dure pot ei să producă. Alții vor să testeze dacă concurenții cunosc un algoritm în particular. Cu un vot 100% democratic, lucrurile se vor duce mereu pe acest făgaș greșit.
  • Membrii trebuie să contribuie cu volumul de muncă așteptat de la ei (estimativ 40-60 de ore).
  • Membrii trebuie să contribuie din timp (vezi calendarul), nu în ultimele 3 zile.
  • Membrii trebuie să trimită surse didactice, citibile, comentate. Este foarte dăunător să propagăm conceptul (greșit) că singurul scop al unui program este să facă ce trebuie. Dacă concursul este internațional, toate numele de variabile și comentariile trebuie să fie în engleză.
  • Membrii trebuie să fie disponibili, pentru două întâlniri în persoană. Facem excepție pentru membrii care nu locuiesc în București, dar și ei trebuie să fie disponibili pentru o videoconferință.
  • Membrii trebuie să îi informeze pe restul despre progresele făcute și planuri de viitor, printr-un e-mail la 3-4 zile. Membrii vor primi mementouri prin e-mail pentru asta. Cei care omit să răspundă la un memento vor primi un avertisment. Cei care omit al doilea răspuns vor fi înlocuiți.
  • Membrii trebuie să anunțe cât mai repede dacă își dau seama că nu mai pot contribui, din orice motive.
  • Dacă sunt autorii unei probleme, membrii trebuie să fie disponibili pe telefon sau în persoană în timpul concursului, în afară de cazul în care altcineva acceptă această răspundere.
  • Membrii trebuie să contribuie cu câteva ore și după concurs, pentru analiza finală (de exemplu, pentru a analiza sursele concurenților ca să vedem cine a reușit să fenteze probleme).
  • Membrii vor face un minim de efort să se descurce cu tehnologiile folosite (să-și încarce testele în mediu, să adauge surse la repository etc.). Va exista un coordonator al acestor activități, dar el nu poate face singur totul.

Regulament de concurs

  • Sursele tuturor concurenților vor fi publicate după concurs, în domeniul public. Prin înscrierea în concurs, concurenții sunt de acord să renunțe la orice formă de copyright pe sursele lor. Nu neapărat toate variantele trimise vor fi publicate, dar cel puțin cea care determină scorul la fiecare problemă (ultima sau cea cu punctaj maxim, după caz).


Tehnologii folosite

Repository

Vom folosi un repository privat pentru toate documentele (surse, teste, enunțuri). Există multe variante (GitHub / GitLab / Bitbucket / instalare proprie de GitLab etc.)

Mediul de concurs

Vom folosi un mediu de concurs pe măsură ce problemele se conturează. Este probabil bine ca acesta să fie același cu cel folosit la concursul în sine. Până acum am lucrat cu CMS și cu CS Academy. Sursele trimise trebuie să conțină, într-un comentariu, numele autorului și metoda de rezolvare. Beneficii:

  • Membrii comisiei își pot testa sursele devreme.
  • Comisia poate afla ușor ce metode sunt deja implementate, ce punctaje iau și ce mai este de făcut pentru fiecare problemă.

Cerințe de la mediu:

  • Să aibă opțiunea pentru feedback complet / parțial.
  • Să permită vederea tuturor surselor trimise (nu doar ultimele N sau orice de acest gen).
  • Să permită relativ ușor organizarea unui concurs paralel online.

E-mail

Principalul mijloc de comunicare este o listă de e-mail, care are două avantaje:

  1. Este asincron. Nu presupune ore fixe.
  2. Ajunge la toți membrii simultan, spre deosebire de telefon.

Evident, membrii pot comunica între ei pe orice canale, dar tot ce este de interes general trebuie să ajungă și pe lista de e-mail.

Eticheta pe e-mail este:

  • Dacă un mesaj este pentru tine, răspunde în maxim 24h. Nu ține lumea în loc.
  • Probleme separate în threaduri separate.


Ce înseamnă o problemă?

Crearea unei probleme de concurs înseamnă mai mult decât o sursă care să ia 100p.

În primul rând este nevoie de o idee. Acest pas durează cât durează, arta nu poate fi grăbită. Ca să facem un set bun de 6 probleme + 1-2 rezerve, realist avem nevoie de 13-15 idei.

Punerea în practică presupune:

  • Tot ce înseamnă discuții pe e-mail despre problemă, dezbaterea algoritmilor etc.
  • Formalizarea enunțului, pentru ca lumea să poată începe să trimită surse. Îl putem modifica ulterior, aducând la zi sursele trimise.
  • Minim două soluții optime.
  • Minim o soluție forță brută, dar cât mai corectă (cât mai greu de greșit).
  • Minim două mânăreli (idei ușoare sau surse foarte scurte care încearcă să obțină cât mai multe puncte).
  • Generatorul de teste. Autorul generatorului trebuie să prezinte în mare algoritmul de generare și cel puțin o altă persoană să-l analizeze.
  • Generarea testelor.
  • O sursă care să facă assert că testele încărcate efectiv în mediul de concurs corespund limitelor promise în enunț.
  • Stabilirea limitelor pentru punctaje parțiale.
  • Implementarea surselor pentru punctaje parțiale (e.g. un algoritm în O(N log^2 N în loc de N log N).
  • Soluția în format PDF, cât mai clară.
  • După concurs, analiza surselor concurenților pentru a vedea cine a reușit să fenteze problema. Ne interesează:
    • cine a reușit să ia 90-100p cu o abordare diferită de a comisiei;
    • cine a reușit să ia 40-50p sau mai mult cu o sursă foarte scurtă.

Toate sursele trebuie să fie didactice și comentate. Este jenant și needucativ să publicăm cod neinteligibil. Nu vă bazați pe altcineva să facă asta pentru voi.

Asta înseamnă zeci de ore per problemă. Nu este o glumă. Gândiți-vă bine dacă aveți acest timp înainte de a accepta invitația în comisie. Dacă tăiem orice colțuri de la această cale, concursul va avea de suferit.


Calendar

termen responsabil activitate
4 luni organizatorul Stabilește câte probleme dorim și la ce nivel (OJI, ONI, lot).
4 luni organizatorul Caută membri pentru comisie. Le transmite clar așteptările de mai sus.
3 luni comisia Componența comisiei este definitivată.

Membrii propun probleme pe lista de e-mail.
Comisia planifică întâlniri în persoană.

3 luni organizatorul Stabilește mediul de concurs.

Caută sysadmin pentru mediu. Acesta are nevoie de timp să învețe sistemul.

2 luni sysadminul Procură calculatoarele necesare pentru mediu (probabil unul singur).

Livrează un mediu funcțional cu conturi și parole pentru membrii comisiei.

2 - 1 luni comisia Are două întâlniri în care dezbate problemele.

Identifică minim 3 probleme de care este sigură, la care poate lucra (vezi secțiunea „Ce înseamnă o problemă?”).

2 luni - 1 săptămână comisia Lucrează la implementări cu tot ce ține de aceasta.
4 săptămâni comisia Setul de probleme este definitivat.

Autorii problemelor caută oameni pentru diversele faze ale implementării și escaladează din timp dacă nu găsesc.

2 săptămâni organizator Compilează listele de concurenți.
1 săptămână comisia Implementarea este finalizată.
1 săptămână organizatorul Team leaderii colaborează pentru traduceri.

Neclaritățile sunt colectate și trimise comisiei.

3-4 zile comisia Comisia corectează neclaritățile.
3-4 zile organizatorul Team leaderii definitivează traducerile.
3 zile sysadminul Creează conturile concurenților.

Creează 10 conturi generice pentru situații de urgență.
Dacă mediul este partajat cu alte activități (ex. Varena), sysadminul se asigură că nu există teme sau alte concursuri cu deadline în timpul concursului nostru.

2 zile înainte organizatorul Tipărește și multiplică subiectele.
în dimineața concursului sysadmin Pornește firewall-ul. Trebuie tăiat accesul la orice în afară de mediu și alte resurse convenite anterior (cplusplus.com etc.).
după concurs comisia Analizează sursele concurenților pentru a vedea cine și cum a reușit să fenteze problemele.