Autorské riešenie
[stiahni py]                                       

  • Počet riešiteľov: 13 / 14 = 93 %                       

  • Úspešnosť riešenia: 3,85 / 7 = 55 %

Aby bolo riešenie prehľadnejšie, je dobré si to rozdeliť na časti. Využívame funkcie mozem_prejst a obcerstvovanie.

Funkcia mozem_presjt vráti počet kilometrov, ktoré ešte môžem prejsť pri danom stúpaní do najbližšieho doplnenia energie.

Funkcia obcerstvovanie vráti zoznam kilometrov trasy, kde je potrebné zjesť tyčinku.

Prechádzame každým úsekom trasy a v každom úseku postupujeme takto:

Kým neprejdeme celý úsek, tak vždy opakujeme:
Vypočítame si, koľko môžeme pri danom stúpaní prejsť pred doplnením energie.
Ak môžeme prejsť celý úsek, tak ho prejdeme a zapamätáme si spotrebovanú energiu.
Ak nemôžeme prejsť celý úsek, tak sa posunieme o vzdialenosť, ktorú ešte môžeme prejsť, doplníme energiu tyčinkou a aktuálnu vzdialenosť si poznačíme do zoznamu.

Na konci vrátime zoznam so vzdialenosťami, v ktorých je potrebné sa občerstviť.

 

#Python
import math


def mozem_prejst(energia_na_km_roviny, spotrebovana_energia, energia_tycinky, uhol):
    return (energia_tycinky - spotrebovana_energia) / (energia_na_km_roviny * (1 + uhol / 35.0))


def obcerstvovanie(energia_na_km_roviny, energia_tycinky, trasa):
    obcerstvenia = []
    prejdena_vzdialenost = 0
    spotrebovana_energia = 0
    for usek in trasa:
        dlzka_useku = usek[0]
        uhol = usek[1]
        aktualna_vzdialenost = prejdena_vzdialenost
        while (aktualna_vzdialenost < prejdena_vzdialenost + dlzka_useku):
            mozem_prejst = mozem_presjt(energia_na_km_roviny, spotrebovana_energia, energia_tycinky, uhol)
            treba_este_prejst = prejdena_vzdialenost + dlzka_useku - aktualna_vzdialenost
            if (mozem_prestt <= treba_este_prejst):
                aktualna_vzdialenost += mozem_prejst
                spotrebovana_energia = 0
                obcerstvenia.append(round(aktualna_vzdialenost, 2))
            else:
                spotrebovana_energia += treba_este_prejst * energia_na_km_roviny * (1 + uhol / 35.0)
                aktualna_vzdialenost = prejdena_vzdialenost + dlzka_useku
        prejdena_vzdialenost += dlzka_useku
    return obcerstvenia

Vaše zaujímavé riešenia a najčastejšie chyby

Zaujímavýmm riešením bolo počítanie s energiou tyčinky ako jednotkou energie.
Častými chybami boli nevracanie zoznamu, alebu jeho vypisovanie rôznymi spôsobmi a vracanie zoznamu, ktorý obsahoval celé čísla - kilometre, po ktorých je potrebné sa občerstviť. Iba v dvoch prípadoch bola použiťá pomocná funkcia.