Soutěž v programování – 34. ročník
Krajské kolo 2020/2021
Koeficient 1
Číselná řada
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
49505152535455565758596061626364656667686970717273747576777879808182838485868788899091
9293949596979899100…
vznikne vypsáním všech přirozených čísel.
Vypracujte program, který pro z klávesnice zadávaná n (maximálně desetimístná čísla) vypíše do jedné vteřiny číslici z n-tého místa této řady a číslo, v kterém se číslice nachází.
Program se ukončí zadáním 0 pro n.
Například pro:
n=10 vypíše: číslice 1 z čísla 10 n=100 vypíše: číslice 5 z čísla 55 n=999 vypíše: číslice 9 z čísla 369 n=9000 vypíše: číslice 2 z čísla 2527 n=12345 vypíše: číslice 3 z čísla 3363 n=99999 vypíše: číslice 1 z čísla 22221 n=0 vypíše: KONEC a program se ukončí
Body se přidělují pouze tehdy, pokud program výsledek oznámí do dvou sekund. Za správnou číslici 0.5 bodu a za správné číslo též 0.5 bodu
Body | Za co |
---|---|
1 | Program lze spustit a ukončit zadáním čísla 0. Pokud je nutno pro každé číslo program znovu startovat tak 0.5 bodu. |
1 | N=1, vrátí 1 (z čísla 1) |
1 | N= 876543225 vrátí 9 (z čísla 109739370) |
1 | N= 200 vrátí 0 (z čísla 103) |
1 | N= 788888890 vrátí 1 (z čísla 100000000) |
1 | N= 8888888919 vrátí 2 (z čísla 1000000002) |
1 | 12349 vrátí 4 (z čísla 3364) |
1 | N= 54321 vrátí 3 (z čísla 13086) |
1 | N= 327 vrátí 5 (z čísla 145) |
1 | Pokud si program na základě N nějakým způsobem spočte, na jakém čísle se nachází, tak jeden bod. Pokud program generuje řetězec složený z posloupnosti čísel a v něm pak vybírá výsledek, tak 0 bodů. |
Koeficient 1
Semafor pro automobily jistě znáte. Vaším úkolem je vytvořit program, který bude takový semafor zobrazovat, a to jako obdélník, který obsahuje nad sebou tři barevná kruhová světla — shora postupně červené, oranžové a zelené. Zhasnuté světlo zobrazte buď černou barvou, nebo velmi tmavou červenou/oranžovou/zelenou (s malým jasem). Rozsvícené světlo naopak zobrazujte s plným jasem.
Po startu programu bude na 5 sekund svítit zelené světlo, pak tři vteřiny svítí oranžové světlo, následně bude 5 sekund svítit červená, pak jednu sekundu červená a oranžová zároveň a následně se celý cyklus opakuje (5 sekund zelená …). Tedy stejně jako na skutečném semaforu, jen čas pro červený a zelený signál jsme v zadání trochu zkrátili.
Nehodnotíme estetičnost provedení, pouze shodu se zadáním.
Časy trvání jednotlivých stavů by neměly být ve zjevném rozporu se zadáním (±20%)
Body | Za co |
---|---|
3 | Grafické vyobrazení semaforu odpovídá zadání |
3 | Posloupnost signálů a jejich časování odpovídá zadání (za každý chybně zobrazený či chybně trvající stav odečíst 1 bod ze tří) |
3 | Standardní chování aplikace (např. ve Windows lze s oknem pohybovat či aplikaci ukončit) |
1 | Dokumentace |
Koeficient 2
Napište program pro stanovení digitálního otisku všech souborů v zadaném adresáři.
Pokud nevíte, co je to digitální otisk (hash), přečtěte si např. https://cs.wikipedia.org/wiki/Hašovací_funkce
Vstupní soubor je textový sobor a obsahuje hexadecimální číslice, tedy znaky 0
až 9
a A
až F
a a
až f
. Může obsahovat i znaky jiné (například znaky nového řádku, mezery, aj.) – ty ignorujte/přeskakujte.
Sečtěte všechny hexadecimální číslice v souboru (součet je opět v hexadecimálním tvaru). Pokud má výsledný součet více než jednu číslici, postup opakujte na výsledném součtu.
Výsledná číslice je digitálním otiskem daného souboru.
Obsah souboru:
EFBB BF 48 61 73 682031
Postup
Sčítáme šestnáctkově postupně číslice E
, F
, B
, B
, atd., až 0
, 3
, 1
. Výsledek = 7E má více než jednu číslici.
Sečteme tedy číslice 7
a E
. Výsledek = 15 má více než jednu číslici.
Sečteme tedy číslice 1
a 5
. Výsledek = 6 má jednu číslici. Je tedy digitálním otiskem.
pořadové_číslo digitální_otisk název_souboru
V adresáři hash najdete několik menších testovacích souborů. V názvu souboru je v závorce hodnota digitálního otisku tohoto souboru. Pokud váš program chcete otestovat i na větších souborech, můžete si je stáhnout z následující adresy https://name.vse.cz/kosek/soutez/hash-soutezici-data.zip (soubor má velikost cca 600 MB).
Výstup výsledků by měl mít formu seznamu setříděného podle názvů souborů.
Body budou přiděleny za každý správný hash/soubor, bez ohledu na splnění předchozích.
Na všechny soubory má program dohromady čas 2 minuty. Pokud do dvou minut program nevypíše otisk, body se nepřidělují.
Testovací soubory si stáhněte z https://name.vse.cz/kosek/soutez/hash-porota-data.zip
Body | Za co |
---|---|
1.0 | Program lze spustit a lze zadat adresář |
1.0 | Adresář lze zadat komfortně |
1.0 | Výstup je ve správném pořadí |
1.0 | Soubor 1 má hash "7" |
1.0 | Soubor 2 má hash "6" |
1.0 | Soubor 3 má hash "6" |
1.0 | Soubor 4 má hash "e" |
1.0 | Soubor 5 má hash "3" |
1.0 | Soubor 6 má hash "5" |
1.0 | Dokumentace |
Koeficient 3
Naprogramujte hru 2048.
Hra 2048 se hraje na hracím plánu, který je tvořen 4×4 čtvercovými políčky. Na čtvercových políčkách mohou být dlaždice s čísly, jejichž hodnoty jsou mocniny 2 – od 2 až do 2048 (211).
V každém tahu se určí směr posunu dlaždic (nahoru, dolů, doleva, doprava).
Konečná pozice a sloučení dlaždic na konci tahu je dáno následujícími pravidly:
Po každém tahu se náhodně na některém z volných čtverců vygeneruje nová dlaždice s číslem 2 nebo 4. Zda je to 2 nebo 4 je také náhodné.
Posun dlaždic lze provést buď
Na začátku hry se vygenerují na náhodných pozicích dvě dlaždice s hodnotou 2.
Cílem hry je posunovat dlaždice po hracím plánu tak, aby vznikla dlaždice s číslem 2048. V tomto případě hra končí výhrou.
Pokud nelze provést tah (tj. neexistuje žádný směr posunu, při kterém by se mohla posunout aspoň jedna dlaždice), hra končí prohrou.
Skóre hry je dáno celkovým součtem čísel na všech dlaždicích.
Jak hra funguje si můžete vyzkoušet na následující adrese https://2048game.com/.
Stav hry se reprezentuje jako textový soubor se čtyřmi řádky. Na každém řádku jsou čtyři čísla oddělená čárkou. Pole bez dlaždice je označeno hodnotou 0.
Jako oddělovač řádků se používá dvojice znaků CR a LF.
Body | Za co |
---|---|
0.5 | Program lze spustit a zobrazí se hrací plán a vygeneruje první 2 dlaždice |
0.5 | Program lze ovládat pomoc kláves |
0.5 | Program lze ovládat pomocí tlačítek |
1.0 | Program lze ovládat pomocí myši |
3.0 | Program správně dodržuje pravidla posunu dlaždic - 4444 - > 0088 |
0.5 | Program správně a průběžně počítá skóre |
1.0 | Program animuje posun dlaždic |
0.5 | Program umožňuje zapsat do souboru/načíst ze souboru aktuální stav hry - dle zadané struktury |
0.5 | Program rozpozná správně konec hry |
1.0 | Program umožňuje vrácení 5 tahů zpět |
1.0 | Program umožňuje přehrát celou partii hry od začátku. |