Autorské riešenie
Zistiť, kto bude žmúriť ako prvý v princípe nie je ťažké. Vedia to už aj malé deti, ktoré vyčítanky používajú. Našou úlohou je vytvoriť program, ktorého výsledok nám povie, kto bude žmúriť ako prvý. Pre samotné riešenie je dôležité si ujasniť základné pravidlá a dátové štruktúry, ktoré budeme používať:
Výsledná funkcie môže vyzerať nasledovne: def kto_zmuri_1(mena, pocet_slabik): mena = mena.copy() idx_prst = 0 smer_vpravo = True while len(mena) > 1: if smer_vpravo: idx_prst = (idx_prst + (pocet_slabik - 1)) % len(mena) mena.pop(idx_prst) idx_prst = idx_prst - 1 else: idx_prst = (idx_prst - (pocet_slabik - 1)) % len(mena) mena.pop(idx_prst) smer_vpravo = not smer_vpravo return mena[0] Všimnime si niekoľko detailov:
Ak si všimneme časti programu, ktoré sa realizujú pre rôzne smery tak vidíme, že sú si podobné. Rozdiel je v tom, či dĺžku vyčítanky pripočítavame alebo odpočítavame a v úprave nového indexu. Funkciu môžeme upraviť (zjednodušiť) aj nasledovne: def kto_zmuri_2(mena, pocet_slabik): mena = mena.copy() idx_prst = 0 smer = 1 while len(mena) > 1: idx_prst = (idx_prst + smer * (pocet_slabik - 1)) % len(mena) mena.pop(idx_prst) if smer == 1: idx_prst = idx_prst - 1 smer = -smer return mena[0] Vaše zaujímavé riešenia a najčastejšie chyby S touto úlohou ste si poradili veľmi dobre. Často sa opakuje zbytočná chyba, keď namiesto vrátenie výsledku ho funkcia vypisuje. Zbytočne tak strácate cenné body. Objavilo sa zaujímavé riešenie (null_guru), kde striedanie smerov vyčítanky nahradili otočením celého zoznamu mien, takže smer bol stále rovnaký. V princípe je to správne riešenie, ale nie veľmi efektívne. |
||||||||||
|
© Univerzita Pavla Jozefa Šafárika v Košiciach, Prírodovedecká fakulta, Ústav informatiky palmaj (zavinac) upjs.sk |
||||||||||