Autorské riešenie
Táto úloha je zameraná na analýzu postupnosti číselných hodnôt - zoznam výšok bodov prejdenej trasy. V zadanom zozname potrebujeme identifikovať vrcholy. Sú to miesta, ktoré sú lokálne najvyššie a zároveň dostatočne vysoko nad najbližšími dolinami (dolinkami, sedlami). K hľadaniu týchto bodov môžeme pristupovať dvoma spôsobmi:
Ak si porovnáme obidva prístupy, v prvom prístupe prechádzame niektorými prvkami opakovane (nájdeme vrchol a vraciame sa, aby sme zistili ako prebiehala trasa pred ním). Druhý prístup je výhodnejší, lebo nám stačí jeden prechod profilom trasy. Realizujme preto druhú možnosť. Prechádzajme postupne bodmi trasy.
Výsledná funkcia môže vyzerať nasledovne: # Python def pocet_vrcholov(profil): profil = profil.copy() profil.append(profil[-1] + 1) pocet = 0 stav = 'vystup' vyska_zaciatok = profil[0] vyska_vrchol = profil[0] for idx in range(1, len(profil) - 1): if profil[idx] > profil[idx + 1] and stav == 'vystup': vyska_vrchol = profil[idx] stav = 'zostup' elif profil[idx] < profil[idx + 1] and stav == 'zostup': vyska_koniec = profil[idx] if vyska_vrchol - vyska_zaciatok >= 15 <= vyska_vrchol - vyska_koniec: pocet = pocet + 1 vyska_zaciatok = profil[idx] stav = 'vystup' return pocet Všimnime si niektoré časti riešenia podrobnejšie. Výlet môže skončiť pri zostupe. V našej úvahe detegujeme ukončnie zostupu začiatkom stúpania. Na koniec záznamu preto pridáme umelú hodnotu, ktorá bude predstavovať začiatok stúpania. Keďže takto modifikujeme zoznam výšok, budeme to realizovať v jeho kópii. Na začiatku predpokladáme, že výlet začne stúpaním. Navyše, začiatok stúpania a vrchol nastavíme na hodnotu profil[0]. To ale nemusí byť pravda. Pozrime sa na to, ako sa to prejaví neskôr. Sú dve možnosti: Začali sme stúpaním. Začiatok stúpania má korektnú hodnotu. Ak prejdeme cez potenciálny vrchol, aktualizujeme na správnu hodnotu aj výšku vrchola. V tomto prípade chyba nenastane. Začali sme klesaním. Hodnota vrchola má korektnú hodnotu. Ak ukončíme klesanie, tak vrchol nie je dostatočne vysoko od začiatklu stúpania (hodnoty sú rovnaké), takže ho nezapočítame. Ani v tomto prípade teda chyba nenastane. Vaše zaujímavé riešenia a najčastejšie chyby Najčastejšie chyby ste robili pri vyhodnocovaní nasledujúcich situáciií:
Niektorí z vás zabudli ošetriť extrémne prípady, kde trasa mala málo záznamov alebo sme len stúpali alebo sme len klesali. Častou chybou bolo testovanie len susedných hodnôt v zozname pre zistenie vrchola. |
|||||||||
© Univerzita Pavla Jozefa Šafárika v Košiciach, Prírodovedecká fakulta, Ústav informatiky palmaj (zavinac) upjs.sk |