Responsabili:
Deadline: 08.01.2019 23:55
Spiridușii lui Moș Crăciun au ieșit la o bătaie cu bulgări de zăpadă pe un ghețar ce are o suprafață sub formă de cerc, centrat și înscris într-o matrice pătratică cu dimensiuni impare. La început aceștia sunt uscați, fiind caracterizați printr-o valoare specifică $hp$, dar pe măsură ce se bulgăresc, această valoare scade, culminând cu momentul când ajunge la 0 (ud leoarcă) și când spiridușul respectiv va trebui să părăsească ghețarul în spinarea lui Rudolf. Pe lângă gradul de uscare, aceștia mai au și o valoare pentru odihnă (energie) $stamina$ ce va fi explicată mai jos. Fiecare spiriduș poate face bulgări de o anumită dimensiune $dmg$, valoare dată de dimensiunea mănușilor pe care spiridușul le are. În fiecare celulă din ghețar se poate găsi o pereche de mănuși cu o dimensiune mai mare, caz în care spiridușul va arunca în celula respectivă vechile lui mănuși, și le va echipa pe cele noi. Deoarece spiridușii sunt foarte firavi, aceștia pot arunca cu bulgări unii în alții doar atunci când se afla în aceeași celulă. Fiind foarte competitivi, niciunul dintre ei nu vrea să renunțe prea ușor, dorind să îl trimită pe adversar acasă. Când doi spiriduși ajung în aceeași celulă, atacă cel cu stamina mai mare (la stamină egală atacă jucătorul care intră în celula respectivă), scăzând dmg din hp-ul celui de al doilea. Cel de al doilea atacă la rândul său în același mod. Evenimentele se repetă pană când un spiriduș se udă leoarcă și este nevoit să plece. Spiridușul care rămâne, câștigă stamina spiridușului pe care l-a trimis acasă (stamina jucătorului eliminat va fi 0). Ghețarul nu este plat ci are denivelări, astfel pentru ca un spiriduș să se deplaseze de la o celulă la alta, acesta va consuma modulul diferenței înălțimilor dintre cele două celule stamină. Dacă nu are suficientă stamină acesta nu se va mișca în direcția respectivă.
Moș Crăciun știe că spiridușii se joacă pe ghețar și vrea să le aducă aminte din când în când că trebuie să vină înapoi în atelierul de jucării să îl ajute. Așa că el trimite o furtună de bulgări de zăpadă ce va avea epicentrul într-o celulă $x$, $y$ și va scădea $dmg$ din $hp$-ul tuturor spiridușilor ce se află în raza circulară $R$ de epicentru.
Din cauza încălzirii globale, ghețarul se topește, pierzând o unitate din rază. Toți spiridușii ce ies înafară ghețarului vor cădea în apă și se vor uda, fiind nevoiți să plece.
Moș Crăciun este ocupat cu împachetarea cadourilor, așa că are nevoie de voi pentru a urmări distracția spiridușilor. Astfel, Moșul vrea un raport ($scoreboard$) cu cei mai puternici (și în același timp, chiulangii) spiriduși și vă poate suna oricând pentru a-i transmite acest lucru.
Fișierul este dat în primul argument al liniei de comandă.
Voi va trebui să citiți din fișierul [nume].in
și să afișați în fișierul [nume].out
.
Pe prima linie se vor găsi două numere, $R$ și $P$, $R$ reprezentând raza inițială a ghețarului, iar $P$, numărul de jucători.
Pe următoarele $2 * R + 1$ linii se găsesc câte $2 * R + 1$ perechi de numere, separate prin spațiu, $A$ $B$, ce corespund caracteristicilor unei celule din ghețar: $A$ - altitudine, $B$ - dimensiune mănuși.
Pe următoarele $P$ linii se găsesc caracteristicile spiridușilor: $nume$ (începe mereu cu majusculă), $x$, $y$, $hp$, $stamina$. $(x, y)$ reprezintă poziția inițială a spiridușului (linia $x$, coloana $y$). Id-urile jucătorilor se vor considera în ordinea citirii, numerotarea începând de la 0. Inițial jucătorii nu au mănuși, deci vor lua mănușa din celula în care aterizează.
[name] has missed the glacier.
Pe următoarele linii se vor citi comenzi de diverse tipuri, câte una pe linie, până la sfârșitul fișierului:
Comanda MOVE [id] [UDLR]+
id
este un număr.[UDLR]+
înseamnă că pot fi unul din caracterele indicate de oricâte ori, cel puțin o dată. Citirea se face până la sfârșitul rândului.U
- susD
- josL
- stangaR
- dreaptaid
are suficientă stamina, dacă nu, mutarea respectiva nu se face.
[name1] sent [name2] back home.
[name] fell off the glacier.
Comanda SNOWSTORM [K]
[K]
este un întreg pe 32 biți.[K]
are 4 octeți [DMG][R][Y][X]
.X, Y, R, DMG
iau valori de la 0 la 255.X, Y
reprezintă epicentrul furtunii de zăpadăR
reprezintă rază circulară a furtunii.
[name] was hit by snowstorm.
DMG
reprezintă dimensiunea bulgărilor ce vor afecta jucătorii ce se află pe raza furtunii
Comanda PRINT_SCOREBOARD
[DRY/WET]
[ELIMINATED]
SCOREBOARD: [name] [DRY/WET] [ELIMINATED] (yes, those are tabs!) . . .
Comanda MELTDOWN [STAMINA]
[STAMINA]
energie.
[name] got wet because of global warming.
Sfarsitul jocului:
[name] has won!
Rulare: ./snowfight snowfight snowfight.in 2 6 99 100 14 15 1 4 29 43 15 15 31 24 2 0 2 0 2 0 12 12 1 5 2 6 3 50 2 0 1 100 31 24 2 0 2 0 2 0 12 12 99 100 14 15 1 4 29 43 15 15 Lucky 0 0 100 100 James 2 0 100 100 Jerry 2 4 100 100 Cristofor 0 2 100 100 Chris 2 3 100 100 Miclaus 2 1 100 100 MOVE 1 RRUUU MOVE 3 DL SNOWSTORM -2130705662 MOVE 2 L MELTDOWN 10 PRINT_SCOREBOARD MOVE 2 L SNOWSTORM 838992641 MOVE 5 R
snowfight.out Lucky has missed the glacier. Miclaus sent James back home. Chris was hit by snowstorm. Cristofor got wet because of global warming. SCOREBOARD: Miclaus DRY 1 Jerry DRY 0 Chris WET 0 Cristofor WET 0 James WET 0 Lucky WET 0 Miclaus sent Jerry back home. Miclaus has won.
Checker-ul temei poate fi descarcat de aici.
./check.sh
Makefile
care să conțină regulile build
și clean
. Regula build
va compila programul într-un executabil cu numele snowfight
. Regula clean
va șterge executabilul și eventual toate binarele intermediare (fișiere obiect) generate de voi.README
care să conțină prezentarea implementării alese de voi. NU copiați bucăți din enunț în README.