This shows you the differences between two versions of the page.
programare:test2_scrabble [2020/11/22 00:59] laurentiu.stefan97 |
programare:test2_scrabble [2020/11/30 12:01] (current) alexandru.mindru [Restrictii si precizari] |
||
---|---|---|---|
Line 3: | Line 3: | ||
* Responsabili: | * Responsabili: | ||
- | * [[todo@gmail.com|Tăzlăuanu Bianca]] | + | * [[tazlauanubianca30@gmail.com |Tăzlăuanu Bianca]] |
- | * [[todo@gmail.com|Mîndru Alexandru-Ionuț]] | + | * [[alexandru20059@gmail.com|Mîndru Alexandru-Ionuț]] |
* [[steflaurentiu@gmail.com|Ștefan Laurențiu]] | * [[steflaurentiu@gmail.com|Ștefan Laurențiu]] | ||
- | * Data publicării: **22.11.2020** | + | * Data publicării: **23.11.2020** |
* Deadline soft: **TODO** | * Deadline soft: **TODO** | ||
* Deadline soft: **TODO** | * Deadline soft: **TODO** | ||
Line 13: | Line 13: | ||
/* | /* | ||
<note important> | <note important> | ||
- | **Atentie! deadline-ul soft coincide cu cel hard! Prin urmare, nu se vor mai accepta submisii dupa data de 13.01.2020!** | + | ****Atentie!** deadline-ul soft coincide cu cel hard! Prin urmare, nu se vor mai accepta submisii dupa data de 13.01.2020!** |
</note> | </note> | ||
*/ | */ | ||
Line 44: | Line 44: | ||
Aceasta tabla va avea aceeasi dimensiune ca si tabla de joc, de 15 X 15. Tabla este populata cu valori de 0, 1 si 2 cu urmatoarea semnificatie: | Aceasta tabla va avea aceeasi dimensiune ca si tabla de joc, de 15 X 15. Tabla este populata cu valori de 0, 1 si 2 cu urmatoarea semnificatie: | ||
- | 0 - niciun bonus | + | * 0 - niciun bonus |
- | 1 - punctajul se dubleaza daca pe patratica respectiva se afla o litera apartinand unui cuvant care are substringul “XX” in compozitie, se da substringul la fiecare joc | + | * 1 - punctajul se dubleaza daca pe patratica respectiva se afla o litera apartinand unui cuvant care are substringul “XX” in compozitie, se da substringul la fiecare joc |
- | 2 - punctajul se tripleaza daca pe patratica respectiva se afla o litera apartinand unui cuvant care se termina cu substringul “XX”, se da substringul la fiecare joc | + | * 2 - punctajul se tripleaza daca pe patratica respectiva se afla o litera apartinand unui cuvant care se termina cu substringul “XX”, se da substringul la fiecare joc |
Modul in care se calculeaza punctajul va fi detaliat ulterior in cerintele temei. Matricea arata in felul urmator: | Modul in care se calculeaza punctajul va fi detaliat ulterior in cerintele temei. Matricea arata in felul urmator: | ||
Line 54: | Line 54: | ||
Pe langa table de bonusuri, in fisierul header scrabble.h din arhiva veti mai primi un vector de cuvinte pe care il veti folosi la anumite task-uri din tema. Vectorul se cheama words si contine 100 de string-uri. | Pe langa table de bonusuri, in fisierul header scrabble.h din arhiva veti mai primi un vector de cuvinte pe care il veti folosi la anumite task-uri din tema. Vectorul se cheama words si contine 100 de string-uri. | ||
- | <note warning> Atentie! Pentru fiecare cerinta veti primi datele de intrare la standard input. De fiecare data primul input pe care il va primi programul vostru este numarul taskului (0-5 pentru tema, 6 pentru bonus) urmand ca mai apoi sa cititi restul de date asa cum este descris pentru fiecare cerinta in parte. </note> | + | <note warning> **Atentie!** Pentru fiecare cerinta veti primi datele de intrare la standard input. De fiecare data primul input pe care il va primi programul vostru este numarul taskului (0-5 pentru tema, 6 pentru bonus) urmand ca mai apoi sa cititi restul de date asa cum este descris pentru fiecare cerinta in parte. </note> |
Line 60: | Line 60: | ||
Veți avea de rezolvat 6 cerințe obligatorii și o cerință bonus. | Veți avea de rezolvat 6 cerințe obligatorii și o cerință bonus. | ||
+ | |||
+ | ==== Cerinta 0: (2 Puncte) - 1 test ==== | ||
+ | Pentru rezolvarea task-urilor veti avea nevoie de tabla de joc. Tabla de bonus este data deja in fisierul header, dar tabla de joc va trebui sa o declarati si sa o initializati voi. | ||
+ | |||
+ | Inainte de a incepe rezolvarea exercitiilor declarati o matrice de 15 X 15. Dupa ce o declarati, populati matricea cu valoarea ‘.’ (caracterul punct). | ||
+ | |||
+ | La input veti primi valoarea 0 (pentru task-ul 0). La standart output va trebui sa afisati matricea goala folosind functia print_board. | ||
==== Cerinta 1: (18 Puncte) - 9 teste ==== | ==== Cerinta 1: (18 Puncte) - 9 teste ==== | ||
Pentru aceasta cerinta va trebui sa cititi numarul intreg N urmat de N linii continand coordonatele unui cuvant si cuvantul respectiv. Dupa ce faceti citirea unei linii, adaugati-o la coordonatele corespunzatoare in matricea de joc (cea pe care ati declarat-o la cerinta 0). Cuvantul va fi pastrat caracter cu caracter in matrice incepand cu coordonatele date. | Pentru aceasta cerinta va trebui sa cititi numarul intreg N urmat de N linii continand coordonatele unui cuvant si cuvantul respectiv. Dupa ce faceti citirea unei linii, adaugati-o la coordonatele corespunzatoare in matricea de joc (cea pe care ati declarat-o la cerinta 0). Cuvantul va fi pastrat caracter cu caracter in matrice incepand cu coordonatele date. | ||
- | Dupa ce ati salvat toate cele N cuvinte puteti sa afisati matricea apeland functia de afisare in felul urmator print_board(game_board). | + | Dupa ce ati salvat toate cele N cuvinte puteti sa afisati matricea apeland functia de afisare in felul urmator: <code>print_board(game_board)</code>. |
- | Atentie! | + | <note warning>**Atentie!** Matricea in care pastrati cuvintele va trebui sa aiba caracterul ‘.’ pe pozitiile neocupate pentru ca functia de afisare sa functioneze.</note> |
- | Matricea in care pastrati cuvintele va trebui sa aiba caracterul ‘.’ pe pozitiile neocupate pentru ca functia de afisare sa functioneze. | + | |
Se da un input de forma: | Se da un input de forma: | ||
Line 85: | Line 91: | ||
(Yi, Xi) - pozitia de unde incepe cuvantul, de la</code> | (Yi, Xi) - pozitia de unde incepe cuvantul, de la</code> | ||
- | <note warning>Atentie! Numerotarea liniilor se face din coltul stanga sus si incepand cu indicele 0!</note> | + | <note warning>**Atentie!** Numerotarea liniilor se face din coltul stanga sus si incepand cu indicele 0!</note> |
- | <note warning>Atentie! Pentru acest task se garanteaza ca nu vor fi date cuvinte care sa iasa din dimensiunile tablei.</note> | + | <note warning>**Atentie!** Pentru acest task se garanteaza ca nu vor fi date cuvinte care sa iasa din dimensiunile tablei.</note> |
Un exemplu de input este urmatorul: | Un exemplu de input este urmatorul: | ||
Line 101: | Line 107: | ||
{{ :programare:teme_2020:scrabble_image3.png?400 }} | {{ :programare:teme_2020:scrabble_image3.png?400 }} | ||
+ | ==== Cerinta 2: (20 Puncte) - 10 teste ==== | ||
+ | Pentru aceasta cerinta va trebui sa calculati punctajul obtinut de doi jucatori fara a tine cont de punctele bonus. Veti primi un input exact ca la task-ul precedent, dar de aceasta data veti afisa punctajul total al celor doi jucatori. | ||
- | ==== Format input ==== | + | Calcularea scorului unui cuvant se face prin insumarea scorului fiecarei litere din cuvant. Scorurile literelor sunt urmatoarele: |
- | Fisierul de intrare, in care se afla informatiile despre fiecare task, se numeste **input.txt**. Acesta are urmatoarea structura: | + | <code>A, E, I, L, N, O, R, S, T, U - 1 Punct |
- | * Pe prima linie se va gasi numele **fisierului binar** ce reprezinta imaginea in format **bmp** care va fi prelucrata ulterior si are formatul descris la inceput (aceasta are cu siguranta extensia **.bmp**, pentru a va putea fi mai usoara creearea numelor imaginilor de output) | + | D, G - 2 Puncte |
- | * Pe a doua linie se va gasi numele **fisierului text** ce reprezinta filtrul ce trebuie aplicat la task-ul 3 (semnificatia acestuia este gasita la descrierea task-ului aferent) | + | B, C, M, P - 3 Puncte |
- | * Pe a treia linie se va gasi numele **fisierului text** ce reprezinta filtrul de pooling ce trebuie aplicat la task-ul 4 (semnificatia acestuia este gasita la descrierea task-ului aferent) | + | F, H, V, W, Y - 4 Puncte |
- | * Pe a patra linie se va gasi numele **fisierului text** ce contine valoarea de threshold necesara aplicarii algoritmului de clustering de la task-ul 5 | + | K - 5 Puncte |
+ | J, X - 8 Puncte | ||
+ | Q, Z - 10 Puncte</code> | ||
- | **Format filtru:** | + | <note tip>**Tip!** Pentru a tine informatiile pentru scorurile fiecarei litere puteti tine un vector de dimensiune 26 cu toate valorile puse in ordine alfabetica. Pentru a afla la ce index in vector se afla scorul unei litere, substrageti valoarea ‘A’ din litera cautata. </note> |
- | <code> | + | |
+ | |||
+ | <note warning>**Atentie!** Doar pentru acest task nu se va tine cont de tabla de bonusuri!</note> | ||
+ | |||
+ | Se da un input de forma: | ||
+ | <code>2 | ||
N | N | ||
- | VAL_11 VAL_12 ... VAL_1N | + | Y1 X1 D1 WORD1 |
- | VAL_21 VAL_22 ... VAL_2N | + | Y2 X2 D2 WORD2 |
- | ........................ | + | … |
- | VAL_N1 VAL_N2 ... VAL_NN | + | Unde: |
- | </code> | + | XX este substringul pentru bonusul primit pentru casutele marcate cu 1. |
- | * **N**: dimensiunea filtrului | + | YY este substringul pentru bonusurile primite pentru casutele marcate cu 2. |
- | * **VAL_IJ**: valoarea filtrului de tip **double** de pe linia i si coloana j | + | N este numarul de cunvinte |
+ | Xi, Yi, WORDi sunt coordonatele pentru cuvantul WORDi | ||
+ | Di este directia in care este scris cuvantul</code> | ||
- | **Format filtru pooling:** | + | Output-ul va fi sub forma urmatoare: |
- | <code> | + | <code>Player 1: W Points |
- | m/M N | + | Player 2: T Points |
- | </code> | + | |
- | * primul caracter area valoarea **m** daca filtrul este de **minim**, iar **M** daca este de **maxim** | + | |
- | * **N**: dimensiunea filtrului | + | |
- | **Exemplu**\\ | + | W este scorul obtinut de primul jucator. |
- | <code c input.txt> | + | T este scorul obtinut de al doilea jucator. |
- | test1.bmp | + | Textul pentru fiecare jucator va fi afisat pe o linie separata.</code> |
- | ./input/filters/filter1.txt | + | |
- | ./input/pooling/pooling1.txt | + | Un exemplu de input este urmatorul: |
- | ./input/clustering/cluster1.txt | + | <code>2 |
- | </code> | + | 5 |
+ | 4 4 0 CAT | ||
+ | 4 6 1 TRAIN | ||
+ | 6 6 0 AIRPLANE | ||
+ | 6 9 1 PROGRAM | ||
+ | 6 10 1 LECTURE </code> | ||
- | <note important> | + | Pentru acest input se obtine outputul urmator: |
- | Exemple de imagini in format bmp si de input-uri pentru task-uri gasiti in directorul ''input'' din checker. | + | <code>Player 1: 24 Points |
- | </note> | + | Player 2: 17 Points</code> |
- | <note warning>Cand scrieti imagini in format BMP, intre ultimul byte din header si byte-ul la care incepe matricea de pixeli (adica pana la byte-ul de offset) trebuie sa scrieti peste tot byte-ul 0. </note> | + | Explicatie: |
+ | <code>Jucatorului 1 ii revin urmatoarele cuvinte din input: “CAT”, “AIRPLANE”, “LECTURE” | ||
+ | Scor(Jucator 1) = Scor(“CAT”) + Scor(“AIRPLANE”) + Scor(“LECTURE”) | ||
+ | Scor(Jucator 1) = (3 + 1 + 1) + (1 + 1 + 1 + 3 + 1 + 1 + 1 + 1) + (1 + 1 + 3 + 1 + 1 + 1 + 1) | ||
+ | Scor(Jucator 1) = 5 + 10 + 9 = 24 | ||
+ | Scor(Jucator 2) = Scor(“TRAIN”) + Scor(“PROGRAM”) = 5 + 12 = 17</code> | ||
- | ==== Format output ==== | ||
- | Dupa cum a fost descris deja, fiecare task are ca scop producerea unei noi imagini, dupa aplicarea unei operatii de procesare pe imaginea initiala. Prin urmare, programul vostru va trebui sa citeasca imaginea de input si sa produca **5** imagini noi, fiecare avand numele specificat in cadrul task-ului corespunzator. | ||
- | Bineinteles, puteti sa sariti peste implementarea unui task sau sa implementati selectiv un anumit numar de taskuri, singura restrictie pe care o aveti este sa nu primiti erori de tipul Segmentation fault, deoarece acestea vor invalida testarea temei. | + | ==== Cerinta 3: (30 Puncte) - 10 teste ==== |
+ | Pentru aceasta cerinta va trebui sa calculati punctajul celor doi jucatori, ca la task-ul precedent, dar de aceasta data va trebui sa verificati daca sunt indeplinite conditiile de bonus. | ||
- | ==== Resurse si checker-ul local ==== | + | Se da un input de forma: |
- | Resursele pentru tema se pot descarca de [[https://drive.google.com/open?id=1ykxNGgllWT6GWDOPGmX8KY38YpW3FCGf|aici]]. Sunt prezente: | + | <code>3 |
+ | XX | ||
+ | YY | ||
+ | N | ||
+ | Y1 X1 D1 WORD1 | ||
+ | Y2 X2 D2 WORD2 | ||
+ | …</code> | ||
- | * **bmp_header.h**: headerul care contine declaratiile struct-urilor pe care le veti folosi in citirea unui fisier BMP; | + | Unde: |
- | * **checker.zip**: arhiva zip ce contine checker-ul cu care puteti sa va testati implementarea local. | + | <code>XX este substringul pentru bonusul primit pentru casutele marcate cu 1. |
+ | YY este substringul pentru bonusurile primite pentru casutele marcate cu 2. | ||
+ | N este numarul de cunvinte | ||
+ | Xi, Yi, WORDi sunt coordonatele pentru cuvantul WORDi | ||
+ | Di este directia in care este scris cuvantul</code> | ||
+ | |||
+ | Output-ul va fi sub forma urmatoare: | ||
+ | <code>Player 1: X Points | ||
+ | Player 2: Y Points</code> | ||
+ | |||
+ | Daca un cuvant are in componenta sa o litera la coordonatele X,Y, iar la aceleasi coordonate pe tabla de bonus casuta respectiva este marcata cu 1, se va verifica daca indeplineste conditia de bonus definita mai sus, iar la final, dupa ce se calculeaza punctajul pentru intregul cuvant, punctajul va fi inmultit cu 2. Acelasi rationament se aplica si pentru patratelele marcate cu 2, dar de data aceasta se va inmulti rezultatul cu 3. Regulile de aplicare a bonusul sunt detaliate la inceputul enuntului la rubrica “Tabla de bonusuri”. | ||
+ | |||
+ | Exemplu: (Vom folosi matricea de bonusuri de mai sus) | ||
+ | <code>3 | ||
+ | LA | ||
+ | IN | ||
+ | 5 | ||
+ | 4 4 0 CAT | ||
+ | 4 6 1 TRAIN | ||
+ | 6 6 0 AIRPLANE | ||
+ | 6 9 1 PROGRAM | ||
+ | 6 10 1 LECTURE</code> | ||
+ | |||
+ | <code>Scor(“TRAIN”) = (1 + 1 + 1 + 1 + 1) * 3 = 15 | ||
+ | Pentru cuvantul “TRAIN” dupa ce calculam scorul fara bonus vom inmulti cu 3 deoarece cuvantul se termina cu silaba “IN”, iar litera “I” se afla la pozitia (7, 6) - pe aceeasi pozitie in tabla de bonusuri se afla cifra 2 - bonus_board[7][6] == 2. | ||
+ | |||
+ | Scor(“AIRPLANE”) = (1 + 1 + 1 + 3 + 1 + 1 + 1 + 1) * 2 = 20 | ||
+ | Pentru cuvantul “AIRPLANE” dupa ce calculam scorul fara bonus vom inmulti cu 2 deoarece litera “R” se afla pe pozitia (6, 8) (bonus_board[6][8] = 1).</code> | ||
+ | |||
+ | <note warning>Atentie! Daca cuvant se suprapune cu doua casute de bonus marcate cu 1 si o casuta de bonus marcata cu 2, daca sunt indeplinite conditiile de bonus, atunci scorul va fi inmultit cu * 2 * 2 * 3.</note> | ||
+ | |||
+ | |||
+ | ==== Cerinta 4: (50 Puncte) - 10 teste ==== | ||
+ | Pentru acesta cerinta va trebui sa gasiti urmatorul cuvant pe care Player 2 poate sa il joace. Mai exact, veti primi ca input lista de cuvinte jucate pana in momentul respectiv de cei doi jucatori. Player 1 pune primul cuvant, apoi Player 2, si asa mai departe. Vor fi date un numar impar de mutari, astfel incat voi va trebui sa gasiti urmatorul cuvant pe care Player 2 poate sa il foloseasca. | ||
+ | |||
+ | Gasiti primul cuvant din vectorul de cuvinte (vectorul words din fisierul scrabble.h) care indeplineste conditiile: | ||
+ | * Face parte din lista de cuvinte (vectorul words din fisierul scrabble.h) | ||
+ | * Cuvantul nu e deja pus pe tabla de niciunul dintre jucatori | ||
+ | * Prima litera din cuvant se afla deja pe tabla si cuvantul poate fi pus in continuarea literei respective, fie pe orizontala, fie pe verticala. (Pentru a verifica acest lucru, se cauta pe tabla prima litera din cuvant de la coltul stanga sus, linie cu linie, pana la coltul dreapta jos al tablei de joc). | ||
+ | * Cuvantul nu iese din marginile tablei de joc si nu se suprapune cu alte cuvinte (inafara de prima litera) | ||
+ | |||
+ | Sa se adauge cuvantul respectiv pe tabla de joc si sa se afiseze tabla. Daca un cuvant poate fi pus si pe orizontala si pe verticala, cuvantul va fi pus pe orizontala. | ||
+ | |||
+ | Inputul va fi de forma urmatoare: | ||
+ | <code>4 | ||
+ | XX | ||
+ | YY | ||
+ | N | ||
+ | Y1 X1 D1 WORD1 | ||
+ | Y2 X2 D2 WORD2 | ||
+ | … | ||
+ | Yn Xn Dn WORDn</code> | ||
+ | Unde: | ||
+ | <code>XX este substringul pentru bonusul primit pentru casutele marcate cu 1. | ||
+ | YY este substringul pentru bonusurile primite pentru casutele marcate cu 2. | ||
+ | N este numarul de cunvinte | ||
+ | Xi, Yi, WORDi sunt coordonatele pentru cuvantul WORDi | ||
+ | Di este directia in care este scris cuvantul</code> | ||
+ | |||
+ | Exemplu: | ||
+ | <code>4 | ||
+ | LA | ||
+ | IN | ||
+ | 5 | ||
+ | 4 4 0 CAT | ||
+ | 4 6 1 TRAIN | ||
+ | 6 6 0 AIRPLANE | ||
+ | 6 9 1 PROGRAM | ||
+ | 6 10 1 LECTURE</code> | ||
+ | |||
+ | Pe baza regulilor definite anterior este ales cuvantul “COMMUNITY”. Output-ul va fi urmatorul: | ||
+ | |||
+ | {{ :programare:teme_2020:scrabble_image4.png?400 }} | ||
+ | |||
+ | ==== Cerinta 5: (30 Puncte) - 10 teste ==== | ||
+ | Pentru aceasta cerinta va trebui sa faceti acelasi lucru ca si la task-ul precedent, dar de aceasta data veti alege primul cuvant din lista de cuvinte care va aduce castigul (sau remiza) pentru Player 2. La calcularea scorurilor se va tine cont de bonus. Cuvantul selectat trebuie sa incapa pe tabla de joc si sa nu se repete. Daca gasiti un astfel de cuvant atunci la output se va afisa tabla de joc care va contine si cuvantul respectiv, in caz contrat se va afisa mesajul “FAIL!”. | ||
+ | |||
+ | Pasi in rezolvarea task-ului: | ||
+ | * Se calculeaza scorul Player-ului 1. | ||
+ | * Se calculeaza scorul Player-ului 2. | ||
+ | * Se cauta cuvantul optim pe care Player 2 poate sa il joace (acel cuvant care adunat la scorul pe care Player 2 il are deja va produce in scor mai mare *sau* egal cu scorul Player-ului 1) | ||
+ | * Daca se gaseste cuvantul va fi afisata tabla ce va contine noul cuvantul. | ||
+ | * Daca nu se gaseste cuvantul va fi afisat mesajul “FAIL!”. | ||
+ | |||
+ | Un cuvant este optim pentru Player 2 daca: | ||
+ | * Face parte din lista de cuvinte (vectorul words din fisierul scrabble.h) | ||
+ | * Cuvantul nu e deja pus pe tabla de niciunul dintre jucatori | ||
+ | * Prima litera din cuvant se afla deja pe tabla si cuvantul poate fi pus in continuarea literei respective, fie pe orizontala, fie pe verticala. (Pentru a verifica acest lucru, se cauta pe tabla prima litera din cuvant de la coltul stanga sus, linie cu linie, pana la coltul dreapta jos al tablei de joc). | ||
+ | * Cuvantul nu iese din marginile tablei de joc si nu se suprapune cu alte cuvinte (inafara de prima litera) | ||
+ | * Produce cel mai mare scor posibil incluzand bonusurile | ||
+ | |||
+ | Inputul va fi de forma urmatoare: | ||
+ | <code>5 | ||
+ | XX | ||
+ | YY | ||
+ | N | ||
+ | X1 Y1 D1 WORD1 | ||
+ | X2 Y2 D2 WORD2 | ||
+ | … | ||
+ | Xn Yn Dn WORDn</code> | ||
+ | Unde: | ||
+ | <code>XX este substringul pentru bonusul primit pentru casutele marcate cu 1. | ||
+ | YY este substringul pentru bonusurile primite pentru casutele marcate cu 2. | ||
+ | N este numarul de cunvinte | ||
+ | Xi, Yi, WORDi sunt coordonatele pentru cuvantul WORDi | ||
+ | Di este directia in care este scris cuvantul</code> | ||
+ | |||
+ | Exemplu: | ||
+ | <code>5 | ||
+ | LA | ||
+ | IN | ||
+ | 5 | ||
+ | 4 4 0 CAT | ||
+ | 4 6 1 TRAIN | ||
+ | 6 6 0 AIRPLANE | ||
+ | 6 9 1 PROGRAM | ||
+ | 6 10 1 LECTURE <code> | ||
+ | |||
+ | Player 1 are cuvintele: “CAT”, “AIRPLANE”, “LECTURE” | ||
+ | Player 2 are cuvintele: “TRAIN”, “PROGRAM” | ||
+ | |||
+ | <code>Scor(Player 1) = TODO | ||
+ | Scor(Player 2) = TODO</code> | ||
+ | |||
+ | ==== Cerinta BONUS: (10 Puncte) - 10 teste ==== | ||
+ | Pentru bonus va trebui sa simulati jocul intre cei doi jucatori. Mai exact, daca inainte la input primeati alternativ cuvintele pentru Player 1 si Player 2, de aceasta data veti primi numai cuvintele pentru Player 1, iar cele pentru Player 2 va trebui sa le alegeti voi din vectorul de cuvinte. | ||
+ | |||
+ | Pasi in rezolvarea task-ului: | ||
+ | * Se citeste numarul task-ului (6), substringurile XX, YY si N | ||
+ | * Pentru i = 0 la N - 1: | ||
+ | * Se citeste Yi Xi Di WORDi (Mutarea cu numarul i a Player-ului 1) | ||
+ | * Se pune (salveaza) pe tabla la coordonatele date cuvant WORDi | ||
+ | * Se cauta cuvantul optim pe care Player 2 poate sa il joace | ||
+ | * Se pune (salveaza) pe tabla la coordonatele gasite cuvantul pentru Player 2 | ||
+ | * Dupa ce sunt citite cele N cuvinte ale Player-ului 1 jocul se termina | ||
+ | * La finalul jocului se afiseaza tabla print_board(board) si pe linia imediat urmatoare | ||
+ | * “Player X Won!” unde X este 1 daca Player 1 a castigat sau 2 daca Player 2 a castigat. | ||
+ | |||
+ | Un cuvant este optim pentru Player 2 daca: | ||
+ | F * ace parte din lista de cuvinte (vectorul words din fisierul scrabble.h) | ||
+ | * Cuvantul nu e deja pus pe tabla de niciunul dintre jucatori | ||
+ | * Prima litera din cuvant se afla deja pe tabla si cuvantul poate fi pus in continuarea literei respective, fie pe orizontala, fie pe verticala. (Pentru a verifica acest lucru, se cauta pe tabla prima litera din cuvant de la coltul stanga sus, linie cu linie, pana la coltul dreapta jos al tablei de joc). | ||
+ | * Cuvantul nu iese din marginile tablei de joc si nu se suprapune cu alte cuvinte (inafara de prima litera) | ||
+ | * Produce cel mai mare scor posibil incluzand bonusurile | ||
+ | |||
+ | Inputul va fi de forma urmatoare: | ||
+ | <code>6 | ||
+ | XX | ||
+ | YY | ||
+ | N | ||
+ | Y1 X1 D1 WORD1 | ||
+ | Y2 X2 D2 WORD2 | ||
+ | … | ||
+ | Yn Xn Dn WORDn</code> | ||
+ | Unde: | ||
+ | <code>XX este substringul pentru bonusul primit pentru casutele marcate cu 1. | ||
+ | YY este substringul pentru bonusurile primite pentru casutele marcate cu 2. | ||
+ | N este numarul de cunvinte | ||
+ | Xi, Yi, WORDi sunt coordonatele pentru cuvantul WORDi</code> | ||
==== Trimitere tema ==== | ==== Trimitere tema ==== | ||
- | Tema va fi trimisa folosind [[https://v2.vmchecker.cs.pub.ro/homepage/|v2.vmchecker]], cursul **Programarea Calculatoarelor**, tema **Image Processing**. | + | Tema va fi trimisa folosind [[https://v2.vmchecker.grid.pub.ro/homepage/|v2.vmchecker]], cursul **Programarea Calculatoarelor**, tema **todo_name**. |
Punctajul: | Punctajul: | ||
- | * 110p - teste (20p sunt bonus) | + | * 140p - teste |
- | * 10 teste | + | * 10p - bonus |
- | * 9p pe test | + | |
- | * 20p pentru rularea fara erori a utilitarului valgrind pe imaginea cea mai mare (doar daca aveti deja 90p) | + | |
* 10p - coding style & README (checker-ul o sa va acorde aceste puncte doar pentru prezenta fisierului README, la corectare acestea vor fi validate) | * 10p - coding style & README (checker-ul o sa va acorde aceste puncte doar pentru prezenta fisierului README, la corectare acestea vor fi validate) | ||
Line 166: | Line 351: | ||
* Nu folositi variabile globale. | * Nu folositi variabile globale. | ||
* Fiti consistenti in ceea ce priveste [[programare:coding-style|Coding Style-ul]]. | * Fiti consistenti in ceea ce priveste [[programare:coding-style|Coding Style-ul]]. | ||
- | * Toate matricile si vectorii folositi se vor aloca **dinamic**, pe **heap**; | + | * Toate matricile si vectorii folositi se vor aloca **static**; |
- | * **Task-ul 2** este singurul in care aveti de modificat si headerele imaginii bmp, in rest **nu veti avea de modificat nimic in headerele imaginii**; | + | * Tema se va trimite pe vmchecker si se va testa local cu ajutorul checker-ului; |
- | * Tema se va trimite pe vmchecker si se va testa local cu ajutorul checker-ului care va fi disponibil **in curand**; | + | |
* Pe vmchecker veti uploada o arhiva in format .zip care sa contina: | * Pe vmchecker veti uploada o arhiva in format .zip care sa contina: | ||
- | - **Makefile**, cu cel puțin 3 targeturi, **build**, **run** și **clean**; Regula **run** trebuie sa ruleze executabilul care a fost obtinut la regula **build** si care are numele **bmp** (vezi si task-ul bonus); | + | - **sursele** voastre, adică fișierele .c și .h. |
- | - **sursele** voastre, adică fișierele .c și .h. **Inclusiv headerul bmp_header.h sau sub orice altă denumire îl folosiți**; | + | |
- **README**, în care trebuie să dați detalii despre implementare, de ce ați ales să rezolvați într-un anumit fel, etc. | - **README**, în care trebuie să dați detalii despre implementare, de ce ați ales să rezolvați într-un anumit fel, etc. | ||
* Daca rezolvati doar o parte din task-uri asigurati-va ca pe celelalte nu primiti erori la rulare (precum SEGFAULT) sau time limit exceeded, altfel tot testul va fi punctat cu 0. De exemplu, daca task-urile 1 si 2 sunt OK dar task-ul 3 primeste SEGFAULT sau dureaza prea mult atunci tot testul se va nota cu 0. | * Daca rezolvati doar o parte din task-uri asigurati-va ca pe celelalte nu primiti erori la rulare (precum SEGFAULT) sau time limit exceeded, altfel tot testul va fi punctat cu 0. De exemplu, daca task-urile 1 si 2 sunt OK dar task-ul 3 primeste SEGFAULT sau dureaza prea mult atunci tot testul se va nota cu 0. | ||
- | |||
- | <note important>**Temele care nu folosesc alocare dinamica vor avea o depunctare de pana la 50 de puncte din punctajul temei, in functie de gravitate! De asemenea, nu va fi acordat punctajul pe bonus in acest caz!**</note> | ||
- | |||
- | <note warning>Nu descarcati imaginile atasate in enunt pentru testare! Acestea nu respecta formatul BMP! Pentru testare folositi **numai** imaginile puse la dispozitie in arhiva de testare. Imaginile de mai sus au doar caracter informativ. </note> | ||
=== Listă depunctări === | === Listă depunctări === | ||
Line 183: | Line 362: | ||
* o temă care nu compilează și nu a rulat pe **vmchecker** nu va fi luată în considerare | * o temă care nu compilează și nu a rulat pe **vmchecker** nu va fi luată în considerare | ||
* o temă care nu rezolvă cerința și trece testele prin alte mijloace nu va fi luată în considerare | * o temă care nu rezolvă cerința și trece testele prin alte mijloace nu va fi luată în considerare | ||
- | * [-50.0]: o tema care nu folosește deloc alocarea dinamică (-70.0 dacă aceasta ia și punctajul bonus) | ||
* [-1.0]: warning-uri la compilare (este obligatorie folosirea în fișierul **Makefile** a flag-ului de compilare **-Wall** pentru regula **build**) | * [-1.0]: warning-uri la compilare (este obligatorie folosirea în fișierul **Makefile** a flag-ului de compilare **-Wall** pentru regula **build**) | ||
* [-1.0]: numele variabilelor nu sunt sugestive | * [-1.0]: numele variabilelor nu sunt sugestive |