Autorské riešenie
[stiahni py]                                       

  • Počet riešiteľov: 21 / 25 = 84 %

  • Úspešnosť riešenia: 5.9 / 7 = 84%                   

Táto úloha bola zameraná na prácu s reťazcami v cykle. Postupne prechádzame každým písmenom prehľadávaného reťazca a kontrolujeme či je zhodné s písmenom hesla. V hesle sa pohybujeme pomocou premennej indexHesla, ktorá začína na prvom písmene hesla a prechádza celým heslom. Ak sú písmená zhodné, tak inkrementujeme hodnotu indexuHesla a hľadáme ďalšie písmeno v prehľadávanom reťazci.

Ak bude splnená podmienka že sme pomocou premennej indexHesla prešli až na koniec hesla, tak sme ho v prehľadávanom reťazci našli. Ak táto podmienka počas trvania cyklu nebude splnená, heslo sa nenašlo.

def najdiHeslo(heslo, retazec):
    '''
    :param heslo: vzorový reťazec, ktorý má byť nájdený
    :type heslo: string
    :param retazec: prehľadávaný reťazec v ktorom sa má nachádzať zašifrované heslo
    :type retazec: string
    :return: vráti či sa heslo nachádza v reťazci
    :rtype: boolean
    '''

    indexHesla = 0;
    for pismeno in retazec:
        if pismeno == heslo[indexHesla]:
            indexHesla += 1
            if indexHesla == len(heslo):
                return True
    return False

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

Veľmi zaujímavé rekurzívne riešenie tejto úlohy od súťažiaceho tímu.

def najdiHeslo(heslo, retazec):
    dlzkaHesla = len(heslo)
    if dlzkaHesla == 0 and len(retazec) >= 0:
        return True
    else:
        prvePismeno = heslo[0]
        for indexPismena in range(len(retazec)):
            if retazec[indexPismena] == prvePismeno:
                return najdiHeslo(heslo[1:], retazec[indexPismena + 1:])
    return False

Väčšina tímov si s úlohou poradila veľmi dobre. Potešili ma riešenia, kde bolo načítavanie vstupov cez klávesnicu. Čo sa týka chýb, tak tie najčastejšie súviseli s tým, že súťažiaci považovali za správne ak znaky hesla boli akokoľvek poprehadzované v reťazci, hoci po poradí netvorili správne heslo. Ďalšou častou chybou bolo neustráženie rozsahu reťazcov a pristupovanie na indexy, ktoré neexistovali.