Autorské riešenie
[stiahni nadrz.py]                                       

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

  • Úspešnosť riešenia: 4,25 / 5 = 85 %

Zo zadania vieme, že vstupom funkcie má byť postupnosť plánovaných režimov čerpadla zadaných v reťazci a aktuálny objem vody v nádrži. Jej parametre nazvyme rezimy a pociatocny_objem. Taktiež vieme, že kapacita nádrže je 1000 litrov a každú minútu z nádrže odčenie 20 litrov vody. Tieto informácie si môžeme uložiť do premenných kapacita a odtok.

Pri riešení tejto úlohy by sme mali postupne prechádzať reťazec režimov čerpadla a podľa aktuálneho znaku (a, b, c, d alebo e) uvažovať príslušný prítok vody (5, 10, 20, 30 alebo 50 litrov) v danej minúte. Objem vody v nádrži teda vieme v každej minúte aktualizovať pripočítaním prítoku a odpočítaním odtoku vody.

Po každej aktualizácii objemu musíme overiť, či nenastala jedna z krízových situácií - teda či nádrž nepretiekla (objem presiahol jej kapacitu) alebo nevyschla (objem je rovný alebo menší ako 0). Ak sa tak stalo, funkcia vráti reťazec, ktorý hovorí o tom, ktorá zo situácií nastala. Ak spracujeme celý reťazec režimov bez toho, aby bol cyklus prerušený, vieme, že voda v nádrži ostala v bezpečných medziach a korytnačky sa môžu veselo kúpať.

def kontrola_nadrze(rezimy, pociatocny_objem):
    kapacita = 1000
    odtok = 20
    objem = pociatocny_objem

    for rezim in rezimy:
        if rezim == "a":
            pritok = 5
        elif rezim == "b":
            pritok = 10
        elif rezim == "c":
            pritok = 20
        elif rezim == "d":
            pritok = 30
        elif rezim == "e":
            pritok = 50
        else:
            pritok = 0

        objem += pritok - odtok

        if objem > kapacita:
            return "pretecenie"
        elif objem <= 0:
            return "vyschnutie"

    return "bez problemov"

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

Väčšina riešení bola, podobne ako autorské riešenie, založená na použití reťazca na simuláciu postupnosti režimov. Niektoré tímy sa rozhodli konvertovať reťazec na zoznam, avšak táto konverzia nebola potrebná, pretože Python umožňuje priamy prístup ku znakom reťazca.

Zopár tímov nahradilo opakované podmienky na identifikovanie režimu slovníkom, v ktorom kľúče reprezentujú režimy (a, b, ...) a hodnoty prítoky (5, 10, ...). Tieto riešenia sú prehľadnejšie a ľahšie rozšíriteľné o ďalšie režimy.

Medzi riešeniami sa vyskytli aj také, ktoré k objemu pripočítavali vopred vypočítaný rozdiel medzi prítokom a odtokom v príslušnom režime. Riešenie je správne, avšak treba si uvedomiť, že pri zmene odtoku (ak by korytnačky chceli vypúšťať viac či menej vody) menej flexibilné.