Responsabili: Denisa Sandu și Radu Stochițoiu
Deadline: 22.11.2015 (deadline hard: 25.11.2015)
În urma realizării acestei teme, studentul va fi capabil:
Locuitorilor din Codeland le-a fost declarat război de către nemiloșii barbari din Common Town, mult mai numeroși și specializați în lupte. Întrucât printre codelandieni există un vrăjitor bătrân, fost student al Facultății de Automatică și Calculatoare, acesta le-a promis că își va folosi ultimele puteri pentru a vă trimite vouă, studenților, locațiile bazelor în care sunt situați luptătorii din Codeland, pentru ca voi să vă alăturați lor în cele mai sigure baze. Magia, însa, e mai complicată de atât, iar voi, studenții, trebuie să vă arătați demni de a o accesa! Datele transmise de vrăjitor ajung la voi criptate, alături de un pergament pe care sunt explicate regulile decriptării.
40% din punctajul pe teste
Primul număr primit, b, reprezintă ingredientul principal al magiei. Acesta este urmat de dimensiunile terenului pe care sunt situate bazele, m și n, ce este structurat asemenea unei matrice. Terenul conține linii între 0 și m-1 și coloane între 0 și n-1. Până la întâlnirea lui -1, vă va fi oferit un șir de numere, pe care voi trebuie să îl decodificați; b reprezintă numărul maxim de biți pe care îi puteți reține deodată.
Considerând că b este egal cu 3, iar șirul de numere este 2, 3, 1, 5, -1 (în binar, 10, 11, 1, 101), șirul nou format va fi 1 0 1 1 1 0, astfel:
Prima parte a acestei teme presupune găsirea acestui șir de biți, folosindu-vă de numărul b și de șirul de numere oferite de vrăjitor.
30% din punctajul pe teste
Din noul șir pot fi extrase coordonatele bazelor în care sunt situați soldații; până la întâlnirea perechii {-1, -1}, vă sunt oferite intervale de tipul [x, y], ce trebuie interpretate astfel:
Considerăm șirul de biti 1 0 1 0 1 1 1 0 1, x = 3, y = 7, m = 4, n = 5.
Numărul format va fi 14 (0 1 1 1 0), iar corespondentul lui în matrice este ilustrat în imaginea de mai jos.
Pentru a obține punctajul celui de-al doilea task, trebuie să afișați pe un rând, separate prin spațiu, coordonatele bazelor.
30% din punctajul pe teste
Dupa ce ați găsit coordonatele bazelor în care sunt situați soldații, trebuie să găsiți cea mai sigură “reuniune de baze”. O reuniune de baze reprezintă mai multe baze cu proprietatea că din oricare se poate ajunge la oricare trecând numai prin alte baze. Trecerea dintr-o bază în alta se poate face în oricare din direcțiile sus, jos, stânga sau dreapta (nu și pe diagonală). Siguranța este reprezentată de numărul de baze incluse într-o reuniune. Considerăm că, în matrice, o bază se identifică prin cifra 1, iar absența bazei în acea poziție este dată de cifra 0.
De la tastatură veți primi pe prima linie trei variabile b, m si n, reprezentând cheia de decriptare, numărul de linii ale terenului de război și numărul de coloane. Pe următoarea linie veți primi un șir de numere care se vor încheia cu -1. Pe următoarele linii veți primi câte două numere, x si y, cu semnificația de mai sus, iar pe ultima linie veți găsi perechea [-1, -1].
În fișierul “codewar.out” veți afișa pe prima linie șirul de biți găsit în urma îndeplinirii TASK-ului 1, pe linia următoare toate numerele formate la TASK 2, iar pe ultima linie coordonatele celulei cea mai din sus-stanga din cea mai sigură reuniune și numărul de baze din care este alcatuită. Dacă sunt mai multe reuniuni cu același număr maxim de baze, se vor afișa toate, pe linii diferite. Formatul este următorul: SIR_DE_BITI SIR_DE_NUMERE LIN COL NR_BAZE LIN COL NR_BAZE …
5 4 4 2 19 8 1 6 -1 1 2 1 4 2 5 8 17 -1 4 5 19 2 3 -1 -1
1 0 1 0 0 1 0 0 0 1 1 1 0 1 4 9 14 4 14 2 0 1 2
În binar, șirul devine 10, 10011, 1000, 1, 110. Șirul nou format va fi 1 0 1 0 0 1 0 0 0 1 1 1 0, astfel:
Pozițiile în matrice sunt:
Matricea va arăta astfel:
0 1 1 0 1 0 0 0 0 1 0 0 0 0 1 0
Cea mai sigură bază este dată de reuniunea celor două așezări de pe prima linie (linia 0), începând cu a doua coloana (coloana 1).
Makefile
care să conţină regulile build
şi clean
. Regula build
va compila programul într-un executabil cu numele codewar
. Regula clean
va şterge executabilul şi eventual toate binarele intermediare (fişiere obiect) generate de voi.README
care să conţină explicații privitoare la modul de rezolvare;./codewar < codewar.in > codewar.out