Autorské riešenie
[stiahni py]

  • Počet riešiteľov: 14 / 15 = 93 %

  • Úspešnosť riešenia: 3.25 / 5 = 65 %

Pri riešení niektorých úloh, a táto k nim patrí, nám pomôže, ak sa zamyslíme nad tým, ako by sme úlohu riešili bez počítača.

Ak by sme hľadali písmenká slova v nejakom inom texte, zrejme by sme postupovali nejako takto:

  1. postupne budeme hľadať písmenká slova v texte, najskôr prvé, potom druhé atď.

  2. zoberieme písmenko slova a budeme ho hľadať v texte,

    • ak sme ho našli, pokračujeme bodom 1. s ďalším písmenkom, nebudeme však hľadať od začiatku textu, ale ďalej od miesta, kde sme práve skončili,

    • ak sme prišli až na koniec textu a písmenko sme nenašli, toto slovo v texte nie je, ďalšie písmenká už ani nemusíme hľadať, stačí že sme našli jedno chýbajúce,

  3. ak sme postupne našli všetky písmenká, môžeme vyhlásiť, že slovo sa v texte nachádza.

Ak tento postup prepíšeme do jazyka Python, funkcia je_sucastou môže vyzerať nasledovne: 

# Python
def je_sucastou(slovo, text):
    idx_text = -1
    for znak in slovo:
        idx_text = text.find(znak, idx_text + 1)
        if idx_text == -1:
            return False
    return True 

Cyklus for nám zabezpečí, že budeme postupne hľadať jednotlivé písmenká hľadaného slova.

V premennej idx_text si pamätáme pozíciu, na ktorej sme našli naposledy hľadané písmenko alebo že sme ho nenašli. Všimnime si, že ďalšie písmenko už hľadáme od nasledujúcej pozície (idx_text + 1).

Na prehľadávanie sme využili funkciu reťazca find. Funkcii vieme povedať nie len to, aké písmenko má hľadať (znak), ale aj to, od akého miesta má hľadať (idx_text + 1). Funkcia vráti pozíciu, kde písmenko našla alebo hodnotu -1. Ak funkcia vráti hodnotu -1 vieme,  že písmenko sa v texte nenašlo a slovo sa v texte nenachádza.

Ak sme našli všetky písmenká, vykonávanie cyklu sa skončilo. V tomto prípade môžeme vyhlásiť, že všetky písmenká slova sa v texte nachádzajú a nachádza sa tam teda aj celé slovo.

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

Úlohu vyriešilo správne 5 tímov. Ostatným robilo problémy správne indexovanie znakov slova a znakov textu, takže občas ich program skončil s chybou, keď index v danom reťazci neexistoval. Niektorí nezohľadňovali poradie hľadaných slov v texte alebo viacnásobné výskyty písmen v slove.