Autorské riešenie
[stiahni imp : py]

  • Počet riešiteľov: 8 / 32 = 25 %

  • Úspešnosť riešenia:  4,14 / 5 = 82,8 %

V prvom rade by sme sa chceli ospravedlniť riešiteľom za chybu v zadaní, kde sme sa Vás najprv pýtali na výpočet percent chybovosti stroja a následne na výpočet percent správnosti stroja. Mali sme na mysli druhú možnosť – vypočítať, na koľko percent pracoval stroj správne. Preto sme uznali za správne riešenie aj jednu, aj druhú možnosť.

Za túto úlohu ste mohli získať spolu 5 bodov. Riešenie a aj hodnotenie úlohy si môžeme rozdeliť do niekoľkých krokov:

  • 1 bod ste mohli získať za správne pomenovanie procedúry/funkcie a zvolenie vhodných parametrov. Procedúru bolo potrebné pomenovať kontrola a mala obsahovať 2 parametre, pomocou ktorých sa zadá jeden a druhý reťazec.

  • V zadaní úlohy sa predpokladalo, že oba reťazce budú rovnako dlhé, preto nebolo potrebné kontrolovať ich dĺžky. Ďalším krokom, za ktorý ste mohli získať 1 bod bol vhodný spôsob kontroly správnych párov písmen v reťazcoch. To sa realizovalo pomocou cyklu for, kde sa prechádzalo prvým alebo druhým reťazcom.

  • V samotnom cykle for bolo potrebné skontrolovať, či sú na jednotlivých pozíciách v reťazcoch správne páry písmen. Za túto kontrolu ste mohli získať 2 body. Jeden za kontrolu párov A-T, T-A, C-G, G-C a druhý za správne vyhodnotenie chyby. Za chybu sa považovali všetky ostatné kombinácie (iné písmeno ako A,C,T,G, medzera). Príkaz na kontrolu mohol vyzerať ako jedna podmienka if (ak) alebo ako 4 podmienky if (ak). Na rátanie počtu správnych dvojíc si bolo potrené vytvoriť lokálnu premennú a inicializovať na 0 ešte pred cyklom for. Pri správnej dvojici ju bolo potrebné zvyšovať o jedna.

  • Posledný krokom bol výpočet percent správnosti stroja. To ste mali vypočítať pomocou vzorca: percenta=spravnedlzka retazca*100 . Za správny výpočet ste mohli získať 1 bod.

Imagine logo
viem kontrola :retazec1 :retazec2
  urobTu "spravne 0
  urobTu "pocet pocet :retazec1
 
  opakuj :pocet [
 
    ak zaroven prvy :retazec1 = "T prvy :retazec2 = "A [urobTu "spravne :spravne+1]
    ak zaroven prvy :retazec1 = "A prvy :retazec2 = "T [urobTu "spravne :spravne+1]
    ak zaroven prvy :retazec1 = "G prvy :retazec2 = "C [urobTu "spravne :spravne+1]
    ak zaroven prvy :retazec1 = "C prvy :retazec2 = "G [urobTu "spravne :spravne+1]
 
    urobTu "retazec1 bezPr :retazec1
    urobTu "retazec2 bezPr :retazec2
  ]
 
  urobTu "percenta :spravne/:pocet*100
  pis :percenta
 
koniec
#Python
def kontrola(retaze1, retazec2) -> int:
    navratovaHodnota = bool()
    spravne = 0
    for i in range(len(retazec1)):
        if retazec1[i] == "A" and retazec2[i] == "T":
            spravne = spravne + 1
        elif retazec1[i] == "T" and retazec2[i] == "A":
            spravne = spravne + 1
        elif retazec1[i] == "G" and retazec2[i] == "C":
            spravne = spravne + 1
        elif retazec1[i] == "C" and retazec2[i] == "G":
            spravne = spravne + 1
        else:
            continue
    spravne = (spravne)/len(retazec1)*100
    return spravne

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

Túto úlohu riešilo spolu 8 tímov. Všetky  riešenia boli viac-menej dobré. Najlepší tým v Python-e bol Svedi a v Imagine Bubaci. Najčastejšie sa vyskytujúce chyby boli, že v prípade iného písmena alebo medzery v reťazci sa kontrola vyhodnotila ako 100% zlá. Okrem toho sa v niektorých prípadoch vyskytovalo, že ak sa v prvom reťazci vyskytovalo iné písmeno alebo medzera, tak sa to vyhodnotilo ako chyba, ale ak sa vyskytovalo v druhom reťazci, tak sa to nevyhodnotilo ako chyba. To isté platilo aj opačne. Ďalšou chybou bolo, že v prípade výskytu iného písmena alebo medzery sa program ukončil chybovou hláškou.

Vo všeobecnosti môžeme povedať, že kódy boli napísané prehľadne a niektoré boli aj pekne okomentované a komunikovali s používateľom. Vyskytli sa 2 typy riešení. Jedno bolo také ako je uvedené autorské riešenie. V druhom prípade si riešitelia vytvorili slovník, v ktorom boli uvedené správne dvojice a pri prechádzaní reťazcom kontrolovali dvojice so slovníkom.