Hodnocení soutěžních úloh

Kategorie programování žáci a mládež

22. dubna 2021

Soutěž v programování – 34. ročník

Krajské kolo 2020/2021

Hrátky s čísly
Semafor
Hash
Hra 2048

Hrátky s čísly

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čí

Hodnocení

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ů.

Semafor

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.

Hodnocení

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

Hash

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

Postup pro stanovení digitálního otisku

Vstupní soubor je textový sobor a obsahuje hexadecimální číslice, tedy znaky 09 a AF a af. 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.

Příklad

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žadavky na program

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).

Hodnocení

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

Hra 2048

Koeficient 3

Naprogramujte hru 2048.

Pravidla hry

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é.

Ukázka základního pohybu
Spojování více dlaždic v jednom řádku

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íl hry

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/.

Úkoly

  1. Nakreslete hrací plán a vygenerujte první dvě dlaždice.
  2. Určení směru posunu dlaždic zajistěte pomocí klávesových šipek.
  3. Určení směru posunu dlaždic zajistěte pomocí 4 tlačítek Nahoru, Dolů, Vlevo a Vpravo.
  4. Určení směru posunu dlaždic zajistěte pomocí tažení myši (levé tlačítko), podle toho, zda je delší vodorovný nebo svislý směr.
  5. Průběžně zobrazujte stav skóre.
  6. Udělejte animaci posunu dlaždic.
  7. Umožněte uložit aktuální stav hry do souboru (formát je popsán dále).
  8. Umožněte načit aktuální stav hry ze souboru. Výběr souboru by měl probíhat způsobem obvyklým v použitém operačním systému – např. pomocí dialogového okna pro výběr souboru.
  9. Program dokáže poznat konec hry (výhru i prohru) a zobrazte tento stav.
  10. Umožněte vrátit 5 tahů zpět.
  11. Umožněte přehrát celou hru ze záznamu a zadat délku pauzy mezi jednotlivými tahy. Funkci přehrání je možné vyvolat i v průběhu hry.

Formát souboru se stavem hry

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.

Hodnocení

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.