Autorské riešenie
[stiahni py]

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

  • Úspešnosť riešenia: 3,32 / 7 = 47,44%

Cieľom úlohy bolo vytvoriť funkciu predpoveď, ktorá na základe histórie meraní prietoku vody a maximálneho bezpečného prietoku na danom úseku rieky určí predpoveď na nasledujúcu hodinu. Výsledná predpoveď pre obyvateľov obsahuje:

  • hydrologický stupeň situácie (normál, bdelosť, výstraha alebo záplava),
  • a informáciu o trende vývoja prietoku vody (či stúpa, klesá alebo je ustálený).

1. Výber hodnôt pre predikciu
Predpoveď sa vypočítava z priemerných zmien za posledných 9 hodín. Program preto najprv zo zoznamu nameraných prietokov vyberie posledných maximálne 10 hodnôt (aby sme získali najviac 9 zmien).
Ošetrenie nedostatku údajov: Ak je k dispozícii menej hodnôt (napríklad na začiatku merania), zadanie vyžaduje, aby sa použili všetky dostupné údaje. V kóde je to vyriešené pomocou rezu (slicingu) [-10:], ktorý automaticky zoberie celý zoznam bez toho, aby program spadol na chybe.

2. Výpočet hodinových zmien a trendu
Následne program prechádza vybrané hodnoty a vypočíta rozdiel medzi každými dvoma po sebe idúcimi meraniami. Z týchto hodnôt určí priemernú zmenu prietoku za jednu hodinu:

priemerna_zmena = sum(zmeny) / len(zmeny)

Smer vývoja sa vyhodnotí nasledovne:

  • stúpa: ak je priemerná zmena väčšia ako 0,
  • klesá: ak je priemerná zmena menšia ako 0,
  • ustálený: ak je priemerná zmena presne rovná 0.

3. Výpočet predpovedaného prietoku
Predpoveď prietoku na nasledujúcu hodinu sa vypočíta tak, že sa zistená priemerná zmena pripočíta k poslednému reálne nameranému prietoku v zozname:

predpovedany_prietok = posledny_prietok + priemerna_zmena

4. Určenie hydrologického stupňa
Vypočítaný predpovedaný prietok sa porovná s percentuálnymi hranicami maximálneho bezpečného prietoku a priradí sa príslušný stupeň:

  • normál: do 50 % maximálneho bezpečného prietoku,
  • bdelosť: nad 50 % do 80 % maximálneho bezpečného prietoku,
  • výstraha: nad 80 % do 100 % maximálneho bezpečného prietoku
  • záplava: nad 100 % maximálneho bezpečného prietoku

5. Výstup
Funkcia vracia dvojicu hodnôt obsahujúcu predpovedaný stupeň a smer zmeny prietoku:

return stupen, zmena_text

Celkový výsledok je teda dvojica dvoch textových hodnôt.

Aby bolo riešenie názorne ukázané, kód obsahuje aj testovacie scenáre (prudký nárast s hrozbou záplavy, klesajúci trend alebo ustálený stav), ktoré overujú správnosť algoritmu pri rôznom počte vstupných údajov.

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

Úlohu sa podarilo temer kompletne vyriešiť iba jednému súťažnému tímu, avšak aj v tomto riešení bola chybička, že funkcia nevracia hodnoty, ale ich len priamo vypíše. Je dobrou programátorskou praxou vracať tzv. návratové hodnoty, ktoré môžu byť ďalej v kóde použité.
Taktiež sa stávalo, že funkcia síce pracovala výborne, ale len pre zoznamy s min. 10 meraniami. Pre kratšie zoznamy padala do kritickej chyby a nedokázala pokračovať.
Niektoré riešenia nevyhodnocovali stupeň ohrozenia a trend/predikciu zmeny prietoku, len vypočítavali samotnú hodnotu predikovaného prietoku.
Taktiež sa vyskytovali logické chyby, ktoré viedli k nesprávnemu výpočtu samotnej predikcie, nakoľko nepracovali s hodinovými ZMENAMI prietoku, ale s hodnotami prietoku, čo sa premietlo do nesprávnych predikcií stupňa a zmeny prietoku.