Autorské riešenie
Zo zadania vieme, že našou úlohou je pomôcť doktorovi Kašlíkovi nájsť najúčinnejšie antibiotiká na bakteriálnu infekciu. Tú spôsobujú 3 druhy baktérií a my poznáme ich zastúpenie v chorej korytnačke. Napr. auria 20%, biola 50% a cália 30%. Pre každý druh baktérie máme špecifické antibiotiká, ktoré daný druh ničia. Všetky 3 špecifické antibiotiká majú rovnakú účinnosť. Ďalej máme širokospektrálne antibiotiká, ktoré s inou účinnosťou ničia všetky druhy baktérií naraz. Potrebujeme teda pracovať s 5 parametrami:
Aby sme dokázali vybrať tie antibiotiká, ktoré celkovo zničia najväčšie množstvo baktérií, musíme uvažovať 4 prípady:
Pre každý prípad vypočítame, aké množstvo baktérií antibiotiká zničili. Vrátime antibiotiká pre maximum z týchto hodnôt. Ak rovnako veľké množstvo baktérií dokáže zničiť viacero antibiotík, stačí, ak funkcia vyber_antibiotikum vráti len jedny z nich. Nižšie vo funkcii vyber_antibiotikum2 uvádzame aj riešenie, v ktorom program vráti všetky najúčinnejšie antibiotiká.
Obrázok: Designed by vectorpocket / Freepik #Pythondef vyber_antibiotikum(p_a, p_b, p_c, u_spec, u_sir): max_znicenych = 0 pocet_znicenych = p_a * u_spec if pocet_znicenych > max_znicenych: vyber = 'A' max_znicenych = pocet_znicenych pocet_znicenych = p_b * u_spec if pocet_znicenych > max_znicenych: vyber = 'B' max_znicenych = pocet_znicenych pocet_znicenych = p_c * u_spec if pocet_znicenych > max_znicenych: vyber = 'C' max_znicenych = pocet_znicenych pocet_znicenych = (p_a + p_b + p_c) * u_sir if pocet_znicenych > max_znicenych: vyber = 'sir' return vyberdef vyber_antibiotikum2(p_a, p_b, p_c, u_spec, u_sir): max_znicenych = 0 pocet_znicenych = p_a * u_spec if pocet_znicenych > max_znicenych: vyber = 'A' max_znicenych = pocet_znicenych pocet_znicenych = p_b * u_spec if pocet_znicenych > max_znicenych: vyber = 'B' max_znicenych = pocet_znicenych elif pocet_znicenych == max_znicenych: vyber = vyber + ' B' pocet_znicenych = p_c * u_spec if pocet_znicenych > max_znicenych: vyber = 'C' max_znicenych = pocet_znicenych elif pocet_znicenych == max_znicenych: vyber = vyber + ' C' pocet_znicenych = (p_a + p_b + p_c) * u_sir if pocet_znicenych > max_znicenych: vyber = 'sir' elif pocet_znicenych == max_znicenych: vyber = vyber + ' sir' return vyber Vaše zaujímavé riešenia a najčastejšie chyby Najčastejšou chybou pri riešení úlohy bol nevhodný výber parametrov, následkom čoho bolo neúspešné celé riešenie. Niektoré tímy pracovali len so zastúpením baktérií auria, biola a cália, vybrali maximum z týchto hodnôt a preň špecifické antibiotiká. Vo funkcii bolo potrebné pracovať s ďalšími 2 parametrami - účinnosťou špecifických a účinnosťou širokospektrálnych antibiotík. Vynásobením účinnosti antibiotík so zastúpením baktérie zistíme počet zničených baktérií. Druhou najčastejšou chybou bol nevhodný výber podmienok pri výbere antibiotík. Niektoré tímy uvažovali len navzájom ostrú nerovnosť medzi zničenými baktériami a tým vylúčili prípady, v ktorých sú aspoň 2 baktérie zastúpené rovnako. Funkcia buď nevrátila nič, alebo stále zbehla do vetvy else a nevrátila korektný výsledok. Niektoré tímy namiesto výberu maximálnej hodnoty urobili výber minimálnej hodnoty, pretože spočítali celkový počet baktérií a odrátali od nich počet zničených. Toto riešenie je taktiež správne. |
||||||||||
© Univerzita Pavla Jozefa Šafárika v Košiciach, Prírodovedecká fakulta, Ústav informatiky palmaj (zavinac) upjs.sk |