Zadanie 6
Najneskorší termín odovzdania: 26.11.2023 (nedeľa) o 18:00
Odovzdávané súbory: HomeTurtle.java
Doplňujúce požiadavky:
- riešenia, ktoré nebude možné skompilovať (t.j. riešenia so syntaktickými chybami) nebudú hodnotené,
- zdrojový kód správne naformátujte (CTRL+SHIFT+F),
- očakáva sa vhodne okomentovaný zdrojový kód,
- nepoužívajte žiadne inštančné premenné (na riešenie úloh nie sú potrebné),
- v prípade potreby si vytvorte pomocné metódy,
- pri riešeniach úloh nie je dovolené využiť triedu
BigInteger
a jej podobné triedy, - pri riešeniach úloh nie je dovolené využiť triedy z JCF (napr. implementácie rozhrania
Map
).
O písomke z algebry (3 body)
Vyučujúci algebry na PF UPJŠ ľúbia dávať na písomke úlohu, kde sa pýtajú, akou najväčšou mocninou nejakého čísla je deliteľný nejaký súčin veľa čísel. Špeciálnym prípadom tejto úlohy je úloha zistiť, koľko núl má na konci súčin týchto čísel (t.j. pýtame sa akou najväčšou mocninou čísla 10 je deliteľný tento súčin). Kým matematici radi vyvodzujú „magické“ vzorce, pomocou ktorých nájdu odpoveď, my na PAZ1a (znalí programovania) si rýchlejšie napíšeme program, ktorý to vypočíta. Aby sme neboli obmedzení len peknými súčinmi (číslami idúcimi za sebou), budeme uvažovať súčin ľubovoľnej postupnosti čísel v rozsahu long
. Samotný výsledok súčinu však môže byť číslo mnohonásobne presahujúce rozsah typu long
.
Do triedy HomeTurtle
pridajte metódu pocetNulVSucine
, ktorá zo zadaného textového súboru načíta bielymi znakmi (medzery, konce riadkov, …) oddelené čísla v rozsahu typu long
a vráti, koľkými nulami bude končiť súčin týchto čísel. Môžete predpokladať, že žiadne z čísel v súbore nebude 0.
1
Produktivita hráčov (4 body)
„Hodnota“ každého hokejistu (brankárov teraz neuvažujeme) sa meria nejakým bodovaním, ktoré zohľadňuje počet jeho gólov, asistencií, ale aj trestných minút. Bodová hodnota gólu je 3 body, hodnota asistencie 2 body, no každý trest uberá hráčovi 2 body. Na začiatku má každý hráč 0 bodov. Hráč s najvyšším počtom bodov potom môže získať rôzne klubové ale aj iné ocenenia (pochvalu trénera). Trénerka hokejového tímu HC PAZ si vedie záznamy o hráčoch, aby vedela analyzovať ich výkonnosť. Záznamy si uchováva v jednoduchom textovom súbore, v ktorom každý riadok obsahuje záznam o jednej „udalosti“ (gól, asistencia alebo trest). Každý záznam obsahuje informácie o type „udalosti“ (reťazec GOL
, ASISTENCIA
alebo TREST
) a číslo hráča (od 1 do 99) ktorý ju má na konte. Môžete predpokladať, že každý hráč tímu sa nachádza v záznamoch aspoň raz. Príklad súboru so záznamami:
1 2 3 4 5 | GOL 12 TREST 5 ASISTENCIA 12 TREST 12 GOL 4 |
Do triedy HomeTurtle
pridajte metódu najproduktivnejsiHrac
, ktorá vráti číslo najproduktívnejšieho hráča, t.j. hráča, ktorý má najlepšie bodové hodnotenie. V prípade, že je takých hráčov viac, preferujeme hráča s menším počtom trestov. Ak nastane opäť zhoda, preferujeme hráča s menším číslom. Ak súbor nie je možné načítať, metóda nech vráti hodnotu -1
.
1
Špirálové pole (10 bodov)
Do triedy HomeTurtle
pridajte metódu spirala
, ktorá do zadaného súboru zapíše obsah číselného poľa vo forme matice (2-rozmerného poľa). Jednotlivé čísla z poľa sú v matici uložené špirálovite.
1
Význam parametrov:
subor
– názov a cesta k súboru, kam chceme zapísať výstupné polecisla
– pole s číslami, ktoré chceme zapísať do súborupocetRiadkov
– počet riadkov, do koľkých chceme zapísať čísla; platí, žepocetRiadkov
bezo zvyšku delí dĺžku poľacisla
.
Špirálovité uloženie: Čísla vo výstupnej matici sú uložené špirálovite, pričom špirála začína na indexe [0][0]
v smere riadku na indexe 0
(vo vodorovnom smere).
Príklady:
spirala(???, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16], 4)
:
1 2 3 4 | 1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7 |
spirala(???, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], 4)
:
1 2 3 4 | 1 2 3 10 11 4 9 12 5 8 7 6 |
spirala(???, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20], 5)
:
1 2 3 4 5 | 1 2 3 4 14 15 16 5 13 20 17 6 12 19 18 7 11 10 9 8 |
Poznámka: Odporúčame vytvoriť si pomocné 2-rozmerné pole, ktoré budete vhodne napĺňať číslami zo vstupného poľa. Samotný zápis dvojrozmerného poľa (matice) do súboru je už jednoduchý – stačí sa inšpirovať úlohami o maticiach z prednášky.
Poznámka k evaluátoru
Textové súbory vytvorené evaluátorom úloh majú konce riadkov kódované spôsobom, aký sa používa v Linuxe alebo MacOS. Niektoré textové editory v MS Windows (napr. Notepad/Poznámkový blok) nevedia takéto súbory korektne zobraziť. Pre ich korektné zobrazenie v MS Windows odporúčame výborný textový editor PSPad alebo Notepad++.