Soutěž v programování – 34. ročník
Krajské kolo 2020/2021
Úlohy můžete řešit v libovolném pořadí a samozřejmě je nemusíte vyřešit všechny. Počet bodů za každou úlohu je uveden přímo v jejím zadání. Hodnotí se shoda se zadáním, funkčnost, dodržování webových standardů a přehlednost zdrojového kódu.
Na řešení úloh máte 4 hodiny čistého času.
Vaše řešení nahrávejte do cloudu přístupného na adrese https://svp.proed.cz/
Přihlašovací jméno a heslo jste dostali emailem. Po přihlášení uvidíte
složku odpovídající vašemu přihlašovacímu jménu (např. X123
) a do ní
řešení uložte. Pokud je řešení jedné úlohy složeno z více
souborů, doporučujeme je nenahrávat samostatně, ale jako jeden ZIP
archiv, jehož jméno odpovídá názvu úlohy (uloha-xyz.zip
).
Vaše řešení musíte nahrát do 13:00, pozdější nahrání souborů nebude možné. Doporučujeme proto řešení nahrát s několikaminutovou rezervou. Pokud ve vaší kategorii řešíte více úloh, je vhodné každou úlohu nahrát hned, jak ji dokončíte.
Nahrávejte jak zdrojové kódy vašeho řešení, tak zkompilované spustitelné soubory (pokud to ve vámi používaném programovacím jazyce dává smysl).
Kompletní řešení každé úlohy (soubory HTML, CSS, obrázky,
Javascript) uložte do samostatného podadresáře nazvaného jménem
úlohy (např. semafor
). Stránku s řešením vždy pojmenujte
index.html
a uložte v kódování UTF-8.
Při zápisu HTML a CSS kódu dodržujte webové standardy. Řešení by mělo fungovat ve všech běžně dostupných prohlížečích.
Při řešení můžete používat frontendové technologie HTML, CSS a JavaScript. Všechny zdrojové kódy musíte napsat sami v průběhu soutěže. Řešení úlohy smí využívat pouze běžně dostupná API současných webových prohlížečů. Preprocesory zdrojového kódu (jako např. Babel, Typescript, Sass, Less, …) jsou povoleny, odevzdávejte pak jak vámi napsaný vstupní kód, tak i vygenerovaný výsledek. Snažte se, aby vygenerovaný výsledek co nejlépe odpovídal zdrojovému souboru, neprovádějte minifikaci nebo obfuskaci.
Není povoleno používat knihovny, frameworky nebo kompilátory, které vyžadují runtime podporu prohlížeče (např. jQuery, Bootstrap, React, mono-wasm, …). Zdůrazňujeme, že stejně jako v minulých letech je zakázáno používat jQuery.
Semafor pro automobily jistě znáte. Vaším úkolem je vytvořit webovou stránku, 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é. Obdélník semaforu na výšku zabírá celou viditelnou plochu prohlížeče. 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 načtení stránky 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.
Při řešení této úlohy není dovoleno používat JavaScript. Musíte si vystačit s HTML a CSS.
Vytvořte stránku s hrací plochou pro hru 2048 a následně hru naprogramujte.
Kromě samotného herního plánu na stránce hry zobrazte aktuální a nejlepší skóre a 10 nejlepších výsledků. Následující obrázek slouží jako inspirace toho, jak přibližně by na stránce měly být jednotlivé prvky rozmístěny.
Stránku vytvořte tak, aby byla responzivní a šlo ji zobrazit i na zařízeních s menším displejem jako je mobilní telefon. V tom případě hrací políčka 4×4 zabírají celou šíři okna prohlížeče a tabulka s výsledky se odsune na konec stránky.
Hra 2048 se hraje na herní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 adrese https://2048game.com/.
Na konci stránky zdokumentujte, které z předchozích úkolů jste vyřešili. Stačí vypsat čísla jednotlivých úkolů.