Soutěž v programování – 33. ročník
Krajské kolo 2018/2019
Úlohy můžete řešit v libovolném pořadí a samozřejmě je nemusíte vyřešit všechny. Za každou úlohu můžete dostat maximálně 10 bodů, z nichž je většinou 9 bodů vyhrazeno na ohodnocení funkčnosti programu, jeho shody se zadáním a efektivity a jeden bod na dokumentaci a přehlednost zdrojového kódu (vhodné členění zdrojového kódu, vhodně zvolené názvy identifikátorů, komentáře na místech, kde je to potřeba, atd.). Body získané za každou úlohu se ještě násobí koeficientem, který odráží složitost úlohy.
Na řešení úloh máte 4 hodiny čistého času.
Před zahájením soutěže vám pořadatel oznámí, kde najdete testovací soubory a kam máte ukládat řešení úloh.
Koeficient 1
Od roku 1920 používá Česká republika (ČR, dříve ČSR, ČSSR, ČSFR) vlajku jak jí známe, tedy:
Vaším úkolem je tuto vlajku nakresit pomocí vašeho programu:
Koeficient 1
Vytvořte program na zkoušení těchto matematických operací: sčítání, odčítání, násobení a dělení.
Všechna čísla včetně výsledku budou celá v intervalu -99 až 99. Tzn. že u dělení musí být čísla navržena tak, že dělení bude bez zbytku. Navrhněte příklady tak, aby čísla příkladů pokryla celý interval -99 až 99. Tzn., že by měl být aspoň jeden příklad, který bude mít jeden z argumentů nebo výsledek v intervalu -99 až -90 nebo 90 až 99.
Program vygeneruje zadaný počet příkladů, které uživatel spočítá a vloží. Nakonec program zobrazí výsledek zkoušení: celkový počet příkladů, počet správných a špatných odpovědí, procentuální úspěšnost zaokrouhlenou na jedno desetinné místo a vypíše chybně vypočítané přiklady.
Program je možno napsat jako:
V obou případech nezapomeňte na stručnou nápovědu – co program dělá a popis parametrů (u konzolové aplikace použijte na vyvolání nápovědy "/?" ).
Ukázka zadání:
Vstup 1: +-*/
Vstup 2: 10
1. | 55 | + | 5 | = | 60 | ok |
2. | 4 | + | 9 | = | 13 | ok |
3. | 5 | * | 5 | = | 27 | chyba |
4. | 45 | / | 9 | = | 5 | ok |
5. | 44 | - | 55 | = | -11 | ok |
6. | -99 | / | 3 | = | -33 | ok |
7. | -6 | * | 8 | = | -48 | ok |
8. | 7 | * | 8 | = | 56 | ok |
9. | 0 | + | 99 | = | 99 | ok |
10. | 16 | / | -2 | = | -8 | ok |
Ukázka výsledku:
Celkem: 10
Správně: 9
Chybně: 1
Úspěšnost: 90.0%
Chybné příklady:
5 * 5 = 27 správně 25
Koeficient 2
V souboru tvlog/tvlog.csv
najdete část logů z testovacího serveru jednoho malého IPTV operátora. Jde o CSV
soubor, ze kterého lze vyčíst, který zakazník se kdy díval na jaký televizní kanál.
Vaším úkolem je napsat program, který bude z tohoto logu zjišťovat statistické údaje
vždy pro jeden konkrétní vybraný měsíc. Po spuštení uživatel vybere vstupní soubor.
Dále zvolí, pro který měsíc statistiku požaduje a vybere, jakou statistiku si přeje
zobrazit.
Program musí umět pro vybraný měsíc zobrazit následující statistiky:
Očekáváme, že program bude napsán dle zvyklostí obvyklých pro použité prostředí – u konzolových aplikací předpokládáme vstupy na příkazové řádce, u grafických prostředí je vhodné použít pro zadávání vstupů a zobrazní výstupů příslušné komponenty daného prostředí.
Poznámky:
Formát souboru:
CSV oddělený středníky, každý řádek obsahuje jeden záznam o čtyřech sloupcích. První sloupec obsahuje číslo zákazníka, druhý označení televizního kanálu, třetí sloupec čas, kdy zákazník začal kanál sledovat (formát je zřejmý) a ve čtvrtém sloupci je „prosledovaný“ čas v sekundách.
Pro Vaši kontrolu – listopad 2018:
Koeficient 2
Při výletech rádi navštěvujeme blízké i vzdálené vrcholy, ale neradi ztrácíme energii zbytečným klesáním. Pomozte nám s plánováním cesty na vrchol.
Napište program, který zjistí, na který nejvyšší vrchol – bod na mapě – se lze dostat bez nutnosti klesat.
Program dostane na vstupu textový soubor s jedním nebo více zadáními a sadu map v souborech. Umožněte uživateli pohodlný výběr vstupního souboru. Zpracujte všechna zadání ve vstupním souboru. Zjištěné výsledky průběžně vypisujte na obrazovku ve stejném pořadí, jako je ve vstupním souboru a umožněte uživateli výsledky uložit do jím zvoleného textového souboru.
Každý řádek souboru obsahuje jedno zadání, nebo je prázdný.
Zadání má tvar:
X Y MAPA
X Y
MAPA
Položky na řádku jsou odděleny právě jednou mezerou.
Mapových souborů stejného jména je více a liší se příponou podle formátu, který obsahují. Nacházejí se ve stejném adresáři (složce), jako soubor se zadáními. Některé mapové soubory jsou obrázky v odstínech šedé – 256 odstínů od černé do bílé. Černá = 0 je nejnižší možná výška. Bílá = 255 je nejvyšší možná výška. Ostatní mapové soubory zaznamenávají tzv. plné barvy. I tomto případě jsou v mapě pouze odstíny šedé – každý bod má stejnou velikost červené, zelené a modré složky. Velikost kterékoliv složky (0-255) je tedy výškou.
Příklad: barva bodu = 11184810 decimálně = AAAAAA hexadecimálně. Velikost složky je AA hexadecimálně = 170 decimálně. Výška je tedy 170.
Vrcholy nebo hřebeny jsou na mapě světlejší, údolí jsou tmavší.
Levý horní roh obrázku má souřadnici 0,0. První souřadnice roste doprava, druhá souřadníce roste dolů.
Po mapě se lze pohybovat v osmi směrech, tedy nejen přes stranu ale i přes roh.
Příklad vstupního souboru:
70 50 KunetickaHora 120 50 Palava 170 100 Rip 300 60 Palava 260 80 Buchlov
Pro první zadání příkladu použijte jeden z těchto souborů: KunetickaHora.bmp
, KunetickaHora.gif
, KunetickaHora.png
, KunetickaHora.pgm
.
Všechny tyto soubory obsahují stejný obrázek, jen se liší formátem souboru.
Stejná mapa může být v jednom zadání použita vícekrát.
Výstup výsledků má tento tvar:
X Y Z MAPA
X Y
Z
MAPA
Položky na řádku jsou odděleny právě jednou mezerou.
V adresáři mapy najdete příklady vstupních, výstupních a mapových souborů.
Při hodnocení se vám započítají výsledky zjištěné a vypsané do 90 sekund za celý vstupní soubor. Nezapomeňte dát uživateli možnost výsledky uložit do souboru – bude hodnoceno.
Koeficient 3
A rak šili spokoleně až do smrdi.
Hláskoslav Slohomil konečně dopsal svůj první román. Výstavbu díla a uvěřitelnost postav zvádl na jedničku, zato v pravopisu poněkud pokulhává (tedy, spíš by bylo spravedlivé říct, že se s bídou belhá). Najal si tedy vás, abyste mu s opravou pravopisu pomohli.
Vaším úkolem je napsat program, který dostane slovník korektních slov plus text napsaný Hláskoslavem Slohomilem, a pro každé Slohomilovo slovo zjistí, na jaká korektní slova ho lze opravit jednou znakovou změnou. Znaková změna může být:
trktor → traktor
);
turaktor → traktor
);
traktoš → traktor
).
Soubor slovnik.txt
obsahuje slovník korektních slov. Každé
slovo je samo na řádku a skládá se z nanejvýš 42 libovolných znaků (kromě znaků konce
řádku). Soubor je uložený
v kódování UTF-8
a každý řádek je ukončený znaky
CR
a LF
. Slovník obsahuje nanejvýš 10 000
slov.
Samotný Slohomilův text je uložený v souboru levopis.txt
,
a to ve stejném formátu jako soubor slovnik.txt
(slovo na
řádku, kódování UTF-8
, řádky ukončeny CR
a LF
,
nanejvýš 10 000
slov, každé o délce do 42 znaků).
Pro každé slovo ze Slohomilova textu najděte všechna korektní slova ze
slovníku, která se liší nanejvýš jednou znakovou změnou.
Výstup uložte do souboru opravy.txt
tak, že na i-tém
řádku jsou mezerou oddělená všechna korektní slova slovníku lišící se
nanejvýš jednou znakovou změnou od Slohomilova slova na i-tém řádku.
Korektní opravy pro jedno slovo vypište v tom pořadí, v jakém jsou korektní
slova uvedena ve slovníku.
slovnik.txt |
levopis.txt |
opravy.txt |
---|---|---|
a | až | a až aš važ |
až | do | |
aš | smrdi | smrti |
smrt | ||
smrti | ||
važ | ||
Soubory s ukázkovými daty naleznete v adresáři otrava-levopisu
.