This is an old revision of the document!
Actualizări: TODO
Scopul temei:
Tema se bazeaza pe o forma a jocului de Scrabble in care va trebui sa folositi in mod special matrici si functii pentru prelucrarea sirurilor de caractere. Scopul final este implementarea completa a jocului astfel incat doi participanti (programul vostru impotriva checker-ului) sa poata sa joace alternativ si sa se determine un castigator.
Jocul are la baza doua table de joc pastrate sub forma unor matrici patratice de dimensiune 15 x 15. O tabla (matrice) va pastra cuvintele “jucate” de cei doi jucatori pe parcursul jocului, in timp ce cealalta tabla va fi folosita pentru a marca casute ce ofera punctaj bonus.
Pentru claritate, vom folosi termenul de tabla de joc pentru a ne referi la matricea care stocheaza cuvinte si tabla de bonusuri pentru matricea care va stoca pozitiile ce ofera puncte bonus in joc.
Tabla de joc va contine cuvinte atat pe lungime, cat si pe latime. Fiecare casuta din matrice va stoca un singur caracter dintr-un cuvant sau caracterul ‘.’ daca este goala.
Initial veti avea o matrice de caractere cu dimensiunea 15 x 15 in care fiecare element din matrice va contine caracterul ‘.’ (deoarece nu avem niciun cuvant salvat la inceput). In exemplul de mai jos este o matrice in care au fost inserate mai multe cuvinte: “CAT”, “AIRPLANE”, “TRAIN”, “PROGRAM”, “LECTURE”.
Aceasta tabla (bonus_board) este deja data in fisierul header (scrabble.h) ce se afla in arhiva cu checker-ul si va ramane neschimbata pe parcursul intregii teme.
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 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
Modul in care se calculeaza punctajul va fi detaliat ulterior in cerintele temei. Matricea arata in felul urmator:
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.
Veți avea de rezolvat 6 cerințe obligatorii și o cerință bonus.
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).
Atentie!
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:
1 N Y1 X1 D1 WORD1 Y2 X2 D2 WORD2 … N -> numar de cuvinte primite Yi -> indicele pe verticala unde va fi plasat cuvantul (linia in matrice) Xi -> indicele pe orizontala unde va fi plasat cuvantul (coloana in matrice) Di -> directia in care este scris cuvantul: * Daca D == 0: cuvantul e scris pe orizontala, de la (Yi, Xi) spre dreapta * Daca D == 1: cuvantul e scris pe verticala, de la (Yi, Xi) in jos Yi - indicele liniei unde este plasata prima litera din cuvant Xi - indicele coloanei unde este plasata prima litera din cuvant (Yi, Xi) - pozitia de unde incepe cuvantul, de la
Un exemplu de input este urmatorul:
1 5 4 4 0 CAT 4 6 1 TRAIN 6 6 0 AIRPLANE 6 9 1 PROGRAM 6 10 1 LECTURE
Fisierul de intrare, in care se afla informatiile despre fiecare task, se numeste input.txt. Acesta are urmatoarea structura:
Format filtru:
N VAL_11 VAL_12 ... VAL_1N VAL_21 VAL_22 ... VAL_2N ........................ VAL_N1 VAL_N2 ... VAL_NN
Format filtru pooling:
m/M N
Exemplu
test1.bmp ./input/filters/filter1.txt ./input/pooling/pooling1.txt ./input/clustering/cluster1.txt
input
din checker.
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.
Resursele pentru tema se pot descarca de aici. Sunt prezente:
Tema va fi trimisa folosind v2.vmchecker, cursul Programarea Calculatoarelor, tema Image Processing.
Punctajul:
Lista nu este exhaustivă. Se pot aplica chiar depunctări mai mari în cazuri excepționale.