Autorské riešenie
Máme súťažnú dráhu, na ktorej sú rozmiestnené stĺpiky. Našou úlohou je vypočítať, celkom koľko metrov dosák potrebujeme tak, aby sme dokázali stĺpiky na dráhe pospájať. O každom stĺpiku máme 2 údaje: vzdialenosť stĺpika od predchádzajúceho a jeho výšku. Taktiež vieme, že výška prvého a posledného stĺpika je 0. Tieto údaje dostávame na vstupe funkcie. Sú uložené vo vnorenom zozname (zozname zoznamov), kde každý zoznam obsahuje práve 2 spomenuté číselné hodnoty. Pre vstupný paramater [[0, 0],[5, 1],[3, 2],[3, 0]] si súťažnú dráhu môžeme predstaviť takto:
Pri riešení úlohy potrebujeme vypočítať dĺžku spojnicu medzi každými 2 stĺpikmi a výsledkom bude celkový súčet dĺžok spojníc. Z obrázku vidíme, že dĺžku spojnice dokážeme pomerne jednoducho vypočítať pomocou Pytagorovej vety. Vzdialenosť je jednoznačne daná číslom. Pri výške si však potrebujeme uvedomiť, že nepracujeme s celou výškou stĺpika, ale len s rozdielom výšok aktuálneho a predchádzajúceho stĺpika. Následne môžeme hodnoty dosadiť do Pytagorovej vety. K výpočtu je potrebné importovať triedu math a použiť funkciu sqrt (odmocnina).
V cykle prechádzame vnoreným zoznamom, do pomocných premenných si načítavame údaje o 2 stĺpikoch a realizujeme výpočet. Výsledok z každého behu cyklu si priebežne spočítavame v premennej, ktorú nakoniec vrátime. #Python def dlzka_dosak(stlpy): vysledok = 0 for i in range(len(stlpy)-1): prvy = stlpy[i] druhy = stlpy[i+1] vzdialenost = druhy[0] vyska = abs(druhy[1] - prvy[1]) vysledok = vysledok + math.sqrt(vzdialenost*vzdialenost + vyska*vyska) return vysledok Vaše zaujímavé riešenia a najčastejšie chyby Úlohu riešilo 6 tímov. Všetky tímy použili správny postup na dosiahnutie vhodného riešenia. Jeden tím však nepracoval s vnoreným, ale klasickým zoznamom, v ktorom boli všetky údaje pokope. Takto uvedený vstup nezodpovedal zadaniu úlohy. |
||||||||||
© Univerzita Pavla Jozefa Šafárika v Košiciach, Prírodovedecká fakulta, Ústav informatiky palmaj (zavinac) upjs.sk |