Autorské riešenie
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. |
||||||||||
© Univerzita Pavla Jozefa Šafárika v Košiciach, Prírodovedecká fakulta, Ústav informatiky palmaj (zavinac) upjs.sk |