Autorské riešenie
[stiahni fiesta.py]                                       

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

  • Úspešnosť riešenia: 4,1 / 6 = 68,33 %                   

Úloha o balónovej fieste je zameraná na prácu so zoznamami (iterovanie cez zoznam, súčet hodnôt v zozname), vetvenie programu pomocou podmienok a výpočet percentovej časti.

Zo zadania vieme, že vstupom funkcie majú byť 2 parametre: zoznam denných teplôt počas fiesty a zoznam objemov všetkých fliaš, ktoré sa budú denne plniť. Úlohou je na základe týchto parametrov vypočítať, aký objem dusíka je potrebné na podujatie objednať.

Množstvo dusíka, ktoré potrebujeme vpustiť v jeden deň do jednej fľaše, závisí od vonkajšej teploty a objemu tejto fľaše. Intervalový zápis teplôt, kde je každému intervalu priradené percento objemu fľaše potrebné na nadusíkovanie, vyzerá nasledovne:

  • (−∞, −10) → 15 % objemu fľaše
  • <−10, 0> → 10 % objemu fľaše
  • (0, 10> → 5 % objemu fľaše
  • (10, ∞) → 0 % (dusík sa nepoužíva)

Pozn.: Okrúhle zátvorky znamenajú, že krajné hodnoty nie sú zahrnuté v intervale a ostré zátvorky znamenajú, že krajné hodnoty sú zahrnuté v intervale.

Na základe týchto teplotných intervalov vieme v programe vytvoriť podmienky, ktoré rozhodnú, koľko percent dusíka sa má použiť pri danej teplote.

Pomocou zvoleného percenta a objemu fľaše vieme vypočítať percentovú časť nasledovne:

percento x objem / 100

alebo:

(percento / 100) x objem.

Aplikujme teraz toto riešenie na celý zoznam teplôt (1 teplota = 1 deň) a celý zoznam objemov fliaš. Iteráciou cez zoznam teplôt zabezpečíme výber správneho percenta pre každý deň. V rámci jednej iterácie tiež pre každú fľašu vypočítame, koľko litrov dusíka do nej potrebujeme vpustiť. Čiastočné výsledky sčítavame do pomocnej premennej, ktorá bude výstupom funkcie.

Program vieme zefektívniť tým, že si na začiatku spočítame celkový objem všetkých fliaš. Potom nám pre každý deň stačí vypočítať percentovú časť iba raz.

Výsledný program môže vyzerať nasledovne:

def vypocet_dusika(teploty, objemy_flias):

    celkovy_objem_flias = sum(objemy_flias)
    celkovy_objem_dusika = 0

    for teplota in teploty:
        if teplota < -10:
            percento = 0.15
        elif teplota <= 0:
            percento = 0.10
        elif teplota <= 10:
            percento = 0.05
        else:
            percento = 0.0

        celkovy_objem_dusika += celkovy_objem_flias * percento

    return celkovy_objem_dusika

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

Plný počet bodov získali 2 tímy. Medzi najčastejšie chyby patrilo nesprávne určenie teplotných rozsahov (najmä zaradenie krajných hodnôt -10, 0 a 10). Ďalšou častou chybou bolo načítavanie hodnôt z reťazca, nie zoznamu. Niektoré riešenia boli neúplné a počítali dusík len pre jeden deň a jednu fľašu.