Soutěž dětí a mládeže v programování – 19. ročník
Krajské kolo 2004/2005
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.
funkčnost | 2 body | program jde spustit a něco dělá |
2 body | program vygeneruje předepsaných 41 stránek | |
0.5 bodu | stránky jsou propojené hypertextem na index.htm a zpět | |
1 bod | stránky jsou propojené hypertextem mezi sebou | |
1 bod | (X)HTML je validní, všechny odkazy jsou platné | |
0.5 bodu | lze zvolit číslo, pro které se má stránka vygenerovat | |
0.5 bodu | lze zvolit, zda generovat jen malou, jen velkou nebo obě násobilky | |
0.5 bodu | lze zvolit barvu pozadí, textu a odkazů | |
0.5 bodu | nastavení lze uložit do konfiguračního souboru | |
0.5 bodu | konfigurační soubor lze znovu načíst a použít | |
dokumentace | 0.5 bodu | komentáře nebo popis činnosti |
0.25 bodu | přehledný zdrojový text | |
0.25 bodu | výstižné názvy proměnných |
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
funkčnost | 0.5 bodu | je možné vybrat vstupní a výstupní soubor a to buď jako parametr příkazové řádky nebo výběrem přes GUI |
0.5 bodu | program správně detekuje poškozený soubor | |
2 body | program provádí agregace pro jedno časové rozlišení | |
2 body | program provádí agregace pro zbylá časová rozlišení (za každé je jeden bod) | |
0.5 bod | výstupní soubor je vytvořen ve správném formátu | |
0.5 bodu | lze zvolit údaj, který se má vypočíst – počet přístupů/přenesená data | |
efektivita | 1 bod | časové údaje jsou konvertovány do nativního datového typu pro práci s datem a časem (např. na počty sekund od roku 1.1.1970) |
1 bod | program používá dynamické struktury pro ukládaní dat | |
1 bod | program nenačítá celý log najednou do paměti, ale zpracovává jej sekvenčně | |
dokumentace | 0.5 bodu | komentáře nebo popis činnosti |
0.25 bodu | přehledný zdrojový text | |
0.25 bodu | výstižné názvy proměnných |
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.
funkčnost | 2 body | zobrazení grafu |
1 bod | zobrazení os | |
1 bod | popisy na ose X | |
1 bod | popisy na ose Y | |
1 bod | jde volit mezi spojnicovým a sloupcovým grafem | |
efektivita | 2 body | optimální využití plochy okna/obrazovky |
1 bod | čitelné zobrazení popisků a hodnot (nejsou přes sebe) | |
dokumentace | 0.5 bodu | komentáře nebo popis činnosti |
0.25 bodu | přehledný zdrojový text | |
0.25 bodu | výstižné názvy proměnných |
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. ........
funkčnost | 0.5 bodu | Je možné vybrat vstupní a výstupní soubor a to buď jako parametr příkazové řádky nebo výběrem přes GUI. |
0.5 bodu | Program správně detekuje poškozený soubor chyba.txt . | |
2 body | Program správně načtě šachovnici se střelci a zobrazí ji. | |
0.5 bodu | Nalezení korektní nejkratší cesty délky 5 na šachovnici test1.txt | |
0.5 bodu | Nalezení korektní nejkratší cesty délky 9 na šachovnici test2.txt | |
0.5 bodu | Nalezení korektní nejkratší cesty délky 11 na šachovnici test3.txt | |
0.5 bodu | Program oznámí neexistenci cesty na šachovnici test4.txt | |
1 bod | Program nalezenou cestu (ne nutně nejkratší) zobrazí. | |
1 bod | Program zobrazí nalezenou cestu interaktivně, tj. umožňuje pomocí tlačítek nebo klávesnice procházet nalezenou cestu vpřed i vzad. | |
0.5 bodu | Nalezení korektní nejkratší cesty délky 22 na šachovnici test5.txt v řádu vteřin. | |
0.5 bodu | Nalezení korektní nejkratší cesty délky 26 na šachovnici test6.txt v řádu vteřin. | |
0.5 bodu | Nalezení korektní nejkratší cesty délky 27 na šachovnici test7.txt v řádu vteřin. | |
0.5 bodu | Nalezení korektní nejkratší cesty délky 31 na šachovnici test8.txt v řádu vteřin. | |
dokumentace | 0.5 bodu | komentáře nebo popis činnosti |
0.25 bodu | přehledný zdrojový text | |
0.25 bodu | výstižné názvy proměnných |