Autorské riešenie
[stiahni py]                                       

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

  • Úspešnosť riešenia: 1,8 / 5 = 36%                

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:

  • zastúpenia 3 druhov baktérií
  • účinnosť špecifických antibiotík
  • účinnosť širokospektrálnych antibiotík

Aby sme dokázali vybrať tie antibiotiká, ktoré celkovo zničia najväčšie množstvo baktérií, musíme uvažovať 4 prípady:

  1. použijeme špecifické antibiotiká na baktériu auria
  2. použijeme špecifické antibiotiká na baktériu biola
  3. použijeme špecifické antibiotiká na baktériu cália
  4. použijeme širokospektrálne antibiotiká na baktérie auria, biola aj cália

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á.

baktérie a antibiotiká

Obrázok: Designed by vectorpocket / Freepik

#Python 
def 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 vyber
def 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.