Autorské riešenie
[stiahni py]

  • Počet riešiteľov: 6 / 6 = 100 %

  • Úspešnosť riešenia: 4,9 / 5 = 98 %                  

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:

dosky na dráhe

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ýpočet Pytagorovou vetou

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.