Soutěž v programování – 32. ročník
Krajské kolo 2017/2018
Ú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
Karlík si takhle jednou hrál na doktora a v ruce měl teploměr, prohlížel si jej a řekl si, že by bylo fajn, kdyby i jeho hodiny na stěně ukazovaly čas stejně, jako se ukazuje teplota na teploměru. Zkuste Karlíkovi pomoci a napište pro něj program, který bude ukazovat aktuální čas na 3 stupnicích (hodiny, minuty a sekundy zvlášť) podobně jako teploměr.
Jako vylepšení můžete naprogramovat (a získat tak další body):
Jak by mohly takové hodiny vypadat se podívejte na obrázku, berte to jako inspiraci :-)
Koeficient 1
Napište program který umí luštit zprávy psané v morzeově abecedě. Vstupní text obsahuje malá a velká písmena české abecedy, mezery, konce řádků a interpunkci a je kódovaný následným způsobem:
Vstup:
Aby program; óóóóóhromil porotu tak musí; umět;všechny,soubory jedním spuštěním. Musí mít READ , ME alternativně help!
Výsledek: AJETOOK
Vstup:
ó n, á h l ý !d é š? ť j i ž ,z v í ,ř i l ,p r a c, h a č, i l ,á; l a, ň t e ,ď b ě ,ž í s h, o u f ,c e m ,G a z e, l k ,ú k, r y t, ů m;
Výsledek: APKQGKQKAENGGYUKCMAKA
Od programu se očekává, že po startu umožní opakovaně vybírat vstupní soubory a dešifrovaný obsah vypisovat na obrazovku. Tj. na jedno spuštění zpracovat postupně více vstupních souborů.
Předpokládejte, že soubory jsou uloženy v kódování UTF-8.
A .- H .... N -. U ..- B -... CH ---- O --- V ...- C -.-. I .. P .--. W .-- D -.. J .--- Q --.- X -..- E . K -.- R .-. Y -.-- F ..-. L .-.. S ... Z --.. G --. M -- T -
Koeficient 1
V akademii věd v chemické sekci manuálně počítají olejové skvrny s různou barvou na vodním filmu. Pomozte jim a napište program, který jim tu práci usnadní.
Pro zjednodušení předpokládejte:
Dále zajistěte:
Program musí:
Ukázka zadání: Vodní film se skvrnami – vstupní
soubor:
Ukázka řešení:
úkol 1: celkový počet skvrn: 7 úkol 2: [0,255,0]: 2x, [255,255,0]: 2x, [0,0,0]: 1x, [0,0,255]:1x, [255,0,0]: 1x úkol 3:
V adresáři skvrny/
nejdete
soubory pro testování vaší úlohy a ukázkové řešení úlohy.
Koeficient 3
Na úřadě v očíslovaných kancelářích sedí úředníci. Pokud jim donesete všechna razítka, která chtějí od jiných úředníků, dají vám to svoje (samozřejmě až po vystání fronty, vyplnění formulářů a zaplacení poplatků, ale to tu řešit nebudeme).
Napište program, který najde nejrychlejší cestu mezi jednotlivými úředníky tak, abyste všechna potřebná razítka ve správném pořadí dostali.
Úředníci jsou popsáni přirozenými čísly, která mají na svých dveřích (v každé kanceláři je jen jeden úředník). Stejným číslem označíme i razítko, které úředník vydává. Kanceláře (tím pádem i úředníci a razítka) mají přirozená čísla v rozsahu 1..10000 . Vstupem je soubor v následujícím tvaru:
<číslo dveří> <požadované razítko 1> <požadované razítko 2> …
Pokud řešení neexistuje z důvodu že si úředníci, jejichž razítka potřebuji, navzájem vyžadují razítka do kruhu, program tento kruh vypíše v následujícím formátu (místo <u1> až <un> uvedete příslušná čísla):
Nelze vyresit - pozadavky do kruhu: <u1> chce <u2> <u2> chce <u3> ... <un> chce <u1>
V ostatních případech bude výstupem seznam dveří, která je potřeba postupně projít, tak abych u každého úředníka už měl všechna razítka, která požaduje, a na konci měl všechna razítka, která potřebuji. Čísla vypisujte jednotlivě po řádcích (na každý řádek jedno číslo).
Vstup:
1 2 3 1 2 3 4 5 2 3 4 5 3 4 5 4 5
Výstup:
5 4 3 2 1
Vstup:
1 2 3 1 2 3 4 5 2 3 4 5 3 4 5 4 5 5 3
Výstup:
Nelze vyřešit - požadavky do kruhu: 3 chce 4 4 chce 5 5 chce 3