Autorské riešenie
Na vyriešenie tejto úlohy je potrebné použiť porovnávanie dvoch rovnako dlhých reťazcov. Prechádzame teda postupne všetky pozície vo vzorovom a prepísanom reťazci. Ak narazíme na miesto, v ktorom sa tieto reťazce nezhodujú, mohlo dôjsť ku chybe dvoch typov. Chyba prvého typu znamená, že súčasný znak v prepísanom reťazci a nasledujúci znak v prepísanom reťaci sú len vymenené v porovnaní so vzorovým reťazcom. Túto situáciu vieme vyriešiť tak, že overíme, či súčasný znak prepísaného reťazca sa rovná nasledujúcemu znaku vzorového reťazca, a zároveň nasledujúci reťazec prepísaného reťazca sa rovná súčasného znaku vzorového reťazca. V takomto prípade pripočítame k aktuálnemu počtu trestných bodov 1 bod a preskočíme pozíciu nasledujúceho znaku v prepísanom reťazci. Chyba druhého typu znamená, že nenastala chyba prvého typu, a zároveň súčasný znak v prepísanom reťazci a súčasný znak vo vzorovom reťazci sú rôzne. V takomto prípade pripočítame k aktuálnemu počtu trestných bodov 2 body a posunieme sa na nasledujúci znak. Ostáva nám už len zabezpečiť situáciu, aby sa správne vyhodnotil aj posledný znak reťazca, v takom prípade test chyby prvého typu nevyhodnocujeme. Nasleduje možný zdrojový kód v jazyku Python: #Python def pocet_bodov(vzor, prepis): trestne_body = 0 pozicia = 0 while pozicia < len(vzor): if vzor[pozicia] != prepis[pozicia]: if (pozicia + 1 < len(vzor) and vzor[pozicia] == prepis[pozicia + 1] and vzor[pozicia + 1] == prepis[pozicia]): trestne_body += 1 pozicia += 2 else: trestne_body += 2 pozicia += 1 else: pozicia += 1 return trestne_body Vaše zaujímavé riešenia a najčastejšie chyby Úlohu riešilo 9 tímov. Niektoré z tímov navyše ošetrili aj podmienku, ktorú sme predpokladali, že vzorový a prepísaný reťazec majú rovnakú dĺžku. Tiež chválime prácu viacerých tímov, ktoré zdrojový kód okomentovali, vhodne otestovali a použili správny zápis podmienok vo vetvení if. Niektoré tímy nedokázali túto podmienku správne zapísať, alebo program vypísal počet trestných bodov iba za jednu chybu a nespočítal, ak bolo v reťazci chýb viac. |
||||||||||
© Univerzita Pavla Jozefa Šafárika v Košiciach, Prírodovedecká fakulta, Ústav informatiky palmaj (zavinac) upjs.sk |