This shows you the differences between two versions of the page.
sd-ca:tem123a2 [2017/03/12 22:03] emil.racec [Exemplu de functionare] |
sd-ca:tem123a2 [2017/03/22 11:01] (current) emil.racec [Punctaj TODO] |
||
---|---|---|---|
Line 14: | Line 14: | ||
* isi imbunatateasca abilitatile in utilizarea limbajului C++ | * isi imbunatateasca abilitatile in utilizarea limbajului C++ | ||
* sa imparta o problema complexa in sub-componente pe care sa le rezolve individula | * sa imparta o problema complexa in sub-componente pe care sa le rezolve individula | ||
+ | * sa utilizeze structura de date hashtable pentru maparea obiectelor jucator cu numele jucatorilor | ||
+ | * sa sorteze o colectie de date dupa criterii multiple (valoare si respectiv alfabetic) | ||
* sa contruiasca si sa utilizeze grafuri pentru o implementare eficienta a problemei | * sa contruiasca si sa utilizeze grafuri pentru o implementare eficienta a problemei | ||
* sa elaboreze o rezolvare complexa, la o cerinta inspirata din realitate | * sa elaboreze o rezolvare complexa, la o cerinta inspirata din realitate | ||
Line 58: | Line 60: | ||
* **senzorii de pozitie**: Sunt ''n'' senzori de pozitie, numerotati de la ''0'' la ''n-1''. Acestia sunt specificati printr-o pozitie relativa fata de ceilalti senzori. Astfel, fisierul de intrare va contine o linie cu un numar ''n'', reprezentand numarul de senzori, urmat de ''n'' linii a cate ''n-1'' valori reprezentand distantele fata de ceilalti senzori. De exemplu: pe linia ''i'' sunt precizate ''n-1'' distante ale senzorului ''i'' fata de toti vecinii lui, in ordine crescatoare. | * **senzorii de pozitie**: Sunt ''n'' senzori de pozitie, numerotati de la ''0'' la ''n-1''. Acestia sunt specificati printr-o pozitie relativa fata de ceilalti senzori. Astfel, fisierul de intrare va contine o linie cu un numar ''n'', reprezentand numarul de senzori, urmat de ''n'' linii a cate ''n-1'' valori reprezentand distantele fata de ceilalti senzori. De exemplu: pe linia ''i'' sunt precizate ''n-1'' distante ale senzorului ''i'' fata de toti vecinii lui, in ordine crescatoare. | ||
* **numele jucatorilor**: Se dau doua liste de nume, aferente jucatorilor celor doua echipe, astfel: pe prima linie doua numere naturale, nevide: ''n'' si ''m'' reprezantand numarul de jucatori, urmate de doua linii continand ''n''respectiv ''m'' nume, sperate prin spatiu. | * **numele jucatorilor**: Se dau doua liste de nume, aferente jucatorilor celor doua echipe, astfel: pe prima linie doua numere naturale, nevide: ''n'' si ''m'' reprezantand numarul de jucatori, urmate de doua linii continand ''n''respectiv ''m'' nume, sperate prin spatiu. | ||
+ | |||
+ | **Obs:** Numele jucatorilor sunt compuse numai din caractere alfabetice (deci nu vor contine numere sau spatii). | ||
Vom detalia in continuare formulele de calcul pentru fiecare dintre acestea. | Vom detalia in continuare formulele de calcul pentru fiecare dintre acestea. | ||
Line 92: | Line 96: | ||
====Winning chance==== | ====Winning chance==== | ||
- | Calcularea probabilitatii de a castiga o repriza este necesara in conditiile in care aceasta nu se poate termina, ca urmare a expirari timpului alocat campionatului sau o defectiune majora a sistemului. Formula are la baza statisticile acumulate despre jucatori si starea jocului curent (i.e. jucatorii ramasi in viata la acel moment): | + | Calcularea probabilitatii de a castiga ultima repriza este necesara in conditiile in care aceasta nu se poate termina, ca urmare a expirari timpului alocat campionatului sau o defectiune majora a sistemului. Formula are la baza statisticile acumulate despre jucatori si starea jocului curent (i.e. jucatorii ramasi in viata la acel moment): |
''winning_chance = sum(alive[i] * (best_shooter[i]/max(best_shooter) + (top_explorer[i] / max(top_explorer)))), i=0:n-1'' | ''winning_chance = sum(alive[i] * (best_shooter[i]/max(best_shooter) + (top_explorer[i] / max(top_explorer)))), i=0:n-1'' | ||
unde: | unde: | ||
- | * ''alive[i]'': ''1'' – daca jucatorul este in viata la incheierea reprizei, ''0'' – altfel | + | * ''alive[i]'': ''1'' – daca jucatorul este in viata la incheierea ultimei reprize, ''0'' – altfel |
* ''best_shooter[i]'': scorul general best_shooter al jucatorului ''i'' | * ''best_shooter[i]'': scorul general best_shooter al jucatorului ''i'' | ||
* ''top_explorer[i]'': scorul general top_explorer al jucatorului ''i'' | * ''top_explorer[i]'': scorul general top_explorer al jucatorului ''i'' | ||
- | Echipa cu valoarea ''winning_chance'' mai mare va fi declarata echipa castigatoare. | + | Echipa cu valoarea ''winning_chance'' mai mare va fi declarata echipa castigatoare a ultimei reprize. |
Line 180: | Line 184: | ||
<code> | <code> | ||
I. Top shooters | I. Top shooters | ||
- | 1. Ana 10p | + | 1. Ana 12p |
2. Elena 6p | 2. Elena 6p | ||
3. Codrin 4p | 3. Codrin 4p | ||
Line 195: | Line 199: | ||
III. Top fire exchange | III. Top fire exchange | ||
1. Ana - Diana 3 | 1. Ana - Diana 3 | ||
- | 2. Ana - Matei 3 | + | 2. Ana - Elena 3 |
- | 3. Ana - Elena 2 | + | 3. Ana - Matei 3 |
4. Codrin - Diana 2 | 4. Codrin - Diana 2 | ||
- | 5. Codrin - Matei 2 | + | 5. Codrin - Elena 2 |
- | 6. Codrin - Elena 2 | + | 6. Codrin - Matei 2 |
IV. Final score | IV. Final score | ||
1 - 2 | 1 - 2 | ||
</code> | </code> | ||
+ | |||
+ | **Obs:** Valorile ''winning_chance'', truncheate la 3 zecimale, pentru exemplul dat sunt: ''2.186'' si respectiv ''2.897'' | ||
===== Indicii de implementare ===== | ===== Indicii de implementare ===== | ||
Line 209: | Line 215: | ||
* unul pentru simularea miscarii luptatorilor in teren si calcularea statisticilor aferente | * unul pentru simularea miscarii luptatorilor in teren si calcularea statisticilor aferente | ||
* si unul pentru simularea schimbului de focuri si calcularea statisticilor aferente | * si unul pentru simularea schimbului de focuri si calcularea statisticilor aferente | ||
- | ===== Teste publice ===== | ||
- | [[http://ocw.cs.pub.ro/courses/_media/sd-ca/teme/sd2015_tema3_checker_v2.zip_TODO|TODOChecker]] | ||
+ | Se recomanda utilizarea unui hashtable pentru maparea directa a numelor jucatorilor cu obiectele corespunzatoare (sau cu indexul acestora). | ||
+ | ===== Checker + teste publice ===== | ||
+ | |||
+ | <hidden> | ||
+ | Puteți descărca checker-ul, cu testele publice aferente, de aici: {{:sd-ca:teme:2017_tema2_lasertag_checker_v1.3.zip|Checker}} | ||
+ | </hidden> | ||
===== Reguli pentru trimitere ===== | ===== Reguli pentru trimitere ===== | ||
Line 222: | Line 232: | ||
* fisier **README** care să conțină detalii despre implementarea temei | * fisier **README** care să conțină detalii despre implementarea temei | ||
- | ===== Punctaj TODO ===== | + | ===== Punctaj ===== |
+ | |||
+ | * 80 puncte obținute pe testele de pe vmchecker. Condiții pentru obținerea punctajului total: | ||
+ | * fără memleak-uri | ||
+ | * fără erori de valgrind | ||
+ | * 20 puncte: README | ||
+ | * **Bonus 20% din punctajul obținut** pentru coding style | ||
+ | * spre exemplu: cu 60p din 100p și coding style perfect, obțineți 60*1.2 = 72p | ||
+ | |||
+ | <note warning>**Nu copiați!** Toate soluțiile vor fi verificate folosind o unealtă de detectare a plagiatului. În cazul detectării unui astfel de caz, atât plagiatorul cât și autorul original (nu contează cine care e) vor primi punctaj 0 pe **toate temele**! | ||
- | * 90 puncte obținute pe testele de pe vmchecker | + | De aceea, vă sfătuim să nu vă lăsați rezolvări ale temelor pe calculatoare partajate (la laborator etc), pe mail/liste de discuții/grupuri etc.</note> |
- | * 10 puncte: README + alte eventuale penalizări | + | |
- | * **Bonus 10 puncte** pentru soluțiile ce nu au memory leak-uri. | + | |
- | * TOTAL: 100 puncte (+10 bonus) | + | |
===== FAQ TODO ===== | ===== FAQ TODO ===== | ||
- | **Q:** Se poate folosi STL? | + | **Q:** Se poate folosi ? |
- | **A:** Se poate folosi clasa string din STL. Folosirea oricărei alte clase din STL **nu este permisă** | + | **A:** Se poate folosi clasa |