This shows you the differences between two versions of the page.
programare:test2_scrabble [2020/11/30 11:51] alexandru.mindru |
programare:test2_scrabble [2020/11/30 12:01] (current) alexandru.mindru [Restrictii si precizari] |
||
---|---|---|---|
Line 63: | Line 63: | ||
==== Cerinta 0: (2 Puncte) - 1 test ==== | ==== 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. | 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). | 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. | La input veti primi valoarea 0 (pentru task-ul 0). La standart output va trebui sa afisati matricea goala folosind functia print_board. | ||
Line 164: | Line 166: | ||
- | ==== Cerinta 3: (15 Puncte) - 10 teste ==== | + | ==== 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. | 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. | ||
Line 209: | Line 211: | ||
- | ==== Cerinta 4: (30 Puncte) - 10 teste ==== | + | ==== 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. | 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: | 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) | + | * Face parte din lista de cuvinte (vectorul words din fisierul scrabble.h) |
- | Cuvantul nu e deja pus pe tabla de niciunul dintre jucatori | + | * 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). | + | * 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) | + | * 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. | 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. | ||
Line 251: | Line 253: | ||
{{ :programare:teme_2020:scrabble_image4.png?400 }} | {{ :programare:teme_2020:scrabble_image4.png?400 }} | ||
- | ==== Cerinta 5: (15 Puncte) - 10 teste ==== | + | ==== 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!”. | 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: | Pasi in rezolvarea task-ului: | ||
- | Se calculeaza scorul Player-ului 1. | + | * Se calculeaza scorul Player-ului 1. |
- | Se calculeaza scorul Player-ului 2. | + | * 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) | + | * 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 se gaseste cuvantul va fi afisata tabla ce va contine noul cuvantul. |
- | Daca nu se gaseste cuvantul va fi afisat mesajul “FAIL!”. | + | * Daca nu se gaseste cuvantul va fi afisat mesajul “FAIL!”. |
Un cuvant este optim pentru Player 2 daca: | Un cuvant este optim pentru Player 2 daca: | ||
- | Face parte din lista de cuvinte (vectorul words din fisierul scrabble.h) | + | * Face parte din lista de cuvinte (vectorul words din fisierul scrabble.h) |
- | Cuvantul nu e deja pus pe tabla de niciunul dintre jucatori | + | * 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). | + | * 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) | + | * 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 | + | * Produce cel mai mare scor posibil incluzand bonusurile |
Inputul va fi de forma urmatoare: | Inputul va fi de forma urmatoare: | ||
Line 301: | Line 303: | ||
Scor(Player 2) = TODO</code> | Scor(Player 2) = TODO</code> | ||
- | ==== Cerinta BONUS: (20 Puncte) - TODO teste ==== | + | ==== 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. | 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: | Pasi in rezolvarea task-ului: | ||
- | Se citeste numarul task-ului (6), substringurile XX, YY si N | + | * Se citeste numarul task-ului (6), substringurile XX, YY si N |
- | Pentru i = 0 la N - 1: | + | * Pentru i = 0 la N - 1: |
- | Se citeste Yi Xi Di WORDi (Mutarea cu numarul i a Player-ului 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 pune (salveaza) pe tabla la coordonatele date cuvant WORDi |
- | Se cauta cuvantul optim pe care Player 2 poate sa il joace | + | * Se cauta cuvantul optim pe care Player 2 poate sa il joace |
- | Se pune (salveaza) pe tabla la coordonatele gasite cuvantul pentru Player 2 | + | * 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 | + | * 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 | + | * 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. | + | * “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: | Un cuvant este optim pentru Player 2 daca: | ||
- | Face parte din lista de cuvinte (vectorul words din fisierul scrabble.h) | + | F * ace parte din lista de cuvinte (vectorul words din fisierul scrabble.h) |
- | Cuvantul nu e deja pus pe tabla de niciunul dintre jucatori | + | * 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). | + | * 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) | + | * 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 | + | * Produce cel mai mare scor posibil incluzand bonusurile |
Inputul va fi de forma urmatoare: | Inputul va fi de forma urmatoare: | ||
Line 339: | Line 341: | ||
==== Trimitere tema ==== | ==== Trimitere tema ==== | ||
- | Tema va fi trimisa folosind [[https://v2.vmchecker.cs.pub.ro/homepage/|v2.vmchecker]], cursul **Programarea Calculatoarelor**, tema **todo_name**. | + | Tema va fi trimisa folosind [[https://v2.vmchecker.grid.pub.ro/homepage/|v2.vmchecker]], cursul **Programarea Calculatoarelor**, tema **todo_name**. |
Punctajul: | Punctajul: | ||
- | * **TODO** - teste | + | * 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 351: | 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**; |
- | * Tema se va trimite pe vmchecker si se va testa local cu ajutorul checker-ului care va fi disponibil **in curand**; | + | * Tema se va trimite pe vmchecker si se va testa local cu ajutorul checker-ului; |
* 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. |