Zadání soutěžních úloh

Kategorie žáci a mládež

Soutěž dětí a mládeže v programování – 19. ročník

Krajské kolo 2004/2005

15. a 16. dubna 2005

Ú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 6 bodů vyhrazeno na ohodnocení funkčnosti programu a jeho shody se zadáním, 3 body na efektivitu a jeden bod na dokumentaci a přehlednost zdrojového kódu. Body získané za každou úlohu se ještě násobí koeficientem, který odráží složitost úlohy.

Na řešení úlohy 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 vzorová řešení pro některé z úloh.

HTML stránky s násobilkou

Koeficient 1

Vytvořte program, který vygeneruje statické HTML stránky s malou a velkou násobilkou.

Úkolem je sestavit program, který vygeneruje následujících 41 stránek HTML:

  • stránku index.htm, která bude sloužit jako úvodní stránka;

  • pro každé číslo NN = 01, …, 20 stránky malaNN.htm s malou násobilkou (násobky od jedné do deseti) a velkaNN.htm s velkou násobilkou (násobky od jedenácti do dvaceti) – celkem 40 statických stránek (stránky mohou mít případně příponu .html); stránka velka07.htm tak například bude obsahovat následující tabulku:

    7 × 11 = 77
    7 × 12 = 84
    7 × 13 = 91
    7 × 14 = 98
    7 × 15 = 105
    7 × 16 = 112
    7 × 17 = 119
    7 × 18 = 126
    7 × 19 = 133
    7 × 20 = 140

Stránky by měly obsahovat pouze validní HTML nebo XHTML kód dle standardů W3C. Platné standardy HTML 4.01 a XHTML 1.0 najdete mezi soubory se zadáním.

Postupně v programu implementujte následující funkce:

  • vygenerování 41 stránek s násobilkou;

  • přidání hypertextových odkazů mezi stránkami;

  • uživatel si může zvolit číslo (1–20), pro které se má stránka s násobilkou generovat;

  • uživatel si může zvolit, zda se mají generovat obě násobilky, nebo jen malá, nebo jen velká;

  • uživatel si může zvolit adresář, kam se mají soubory vygenerovat;

  • uživatel si může zvolit barvu pozadí, textu a odkazů;

  • uživatel si může uložit nastavení předchozích voleb do zvoleného souboru a později je zase využít.

Analýza logového souboru

Koeficient 3

Vytvořte program, který bude analyzovat volitelný vstupní soubor a výsledek analýzy uloží do zvoleného souboru v předepsaném formátu.

Každý řádek vstupního souboru obsahuje jednu položku v následujícím formátu:

datum_a_čas URL návratový_kód přenesená_data

Řádky jsou uloženy v chronologickém pořadí. URL je textový řetězec neobsahující mezery. Návratový kód je celočíselná hodnota z intervalu 100–599. Velikost přenesených dat je udávána v bajtech a jedná se o celé číslo.

Cílem analýzy vstupních dat je pro volitelné časové rozlišení (minuta, hodina nebo den) spočítat kolikrát se jednotlivý návratový kód vyskytl a kolik dat se pro něj přeneslo.

Výsledky analýzy program uloží do uživatelem zvoleného souboru v následujícím formátu:

datum_a_čas_začátku_intervalu návratový_kód počet_výskytů přenesená_data

Výstup analýzy pak může vypadat následovně:

2005-02-15 00:00:00 200 543 534240
2005-02-15 00:00:00 404 24 2343
2005-02-16 00:00:00 200 2345 9544320

Vykreslování grafů

Koeficient 2

Vaším úkolem je napsat program, který bude zobrazovat data z CSV souboru jako graf. Vstupní soubor bude mít formát:

"popisek1","hodnota1"
"popisek2","hodnota2"
...

Uvozovky jsou nepovinné, pokud se čárka nevyskytuje uvnitř popisku či hodnoty. Popiskem může být libovolný text neobsahující uvozovky. Hodnota bude vždy nezáporné číslo, případná desetinná část se odděluje tečkou. Soubor může obsahovat maximálně 100 položek.

Hodnoty se zobrazují na svislé ose (Y), popisky na vodorovné (X). U obou os zvolte vhodně měřítko, v případě nedostatku místa pro popisky na ose X můžete některé vynechat. Rozsah osy s hodnotami (Y) volte vždy od 0, maximální hodnotu zaokrouhlete směrem nahoru tak, aby zobrazená čísla obsahovala nejvýše dvě nenulové číslice (například je-li maximální hodnota v souboru 12345, bude mít osa Y rozsah od 0 do 13000).

Pro splnění úkolu je třeba správně zobrazit spojnicový graf a obě osy včetně popisů, navíc bude bodována schopnost programu zobrazit stejná data jako sloupcový graf.

Nechte to koňovi

Koeficient 4

Vaším úkolem je napsat program, který najde nejkratší cestu koněm na šachovnici, kde jsou některá pole ohrožována nepřátelskými střelci, a interaktivně ji zobrazí.

Program dostane na vstup šachovnici o rozměrech N řádků a M sloupců. Na této šachovnici je označeno startovní pole, cílové pole a na některých polích jsou nepřátelští střelci. Každý z těchto střelců ohrožuje pole, na kterém stojí, a obě diagonály (klasický šachový střelec). Navíc startovní ani cílové pole ohroženo není.

Program najde nejkratší cestu koněm (klasický šachový kůň) ze startovního políčka do cílového tak, aby kůň ani jednou nevkročil na pole, které by bylo ohrožené kterýmkoliv střelcem. Nalezenou cestu poté program interaktivně zobrazí, tj. vykreslí danou šachovnici se střelci a umožní odkrokování nalezené nejkratší cesty. Navíc program vypíše délku (počet tahů) nalezené cesty. V případě, že cesta ze startovního do cílového pole neexistuje, program to ohlásí.

Vstupem je soubor, který si uživatel vybere při spuštění programu. Tento soubor bude obsahovat na prvním řádku dvě čísla oddělená mezerou, a to N a M. Dalších M řádek bude popisovat M řádek šachovnice, každá se bude skládat z N znaků, kde

  • S značí startovní pole;

  • K značí cílové pole;

  • * značí střelce;

  • . značí volné pole šachovnice.

Startovní i cílové pole je právě jedno.

Maximální velikost šachovnice je 26 × 26, takže políčka šachovnice můžete označovat běžným způsobem A1 až Z26, kde písmenko značí řádek (nejspodnější je A) a číslo sloupec (nejlevější je 1).

Následuje příklad souboru obsahujícího šachovnici s nejkratší cestou délky šest:

8 8
........
.....*..
Z.......
........
........
........
..*...K.
........