Autorské riešenie
Pri tvorbe riešenia úlohy musíme zohľadniť kritériá zo zadania úlohy:
Ak sa na sprievod neprihlási dostatočný počet korytnačiek, program vráti prázdny reťazec. Pre sprievod potrebujeme aspoň 6 korytnačiek, keďže zo zoznamu treba vybrať 2 najstaršie a 4 najmladšie. Poznáme prezývky korytnačiek, ktorých dĺžka značí aj vek korytnačky. Zo zadania vieme, že vek korytnačky zodpovedá dĺžke prezývky korytnačky. Vybrať 2 najstaršie korytnačky znamená nájsť 2 korytnačky s najdlhšími prezývkami. Podobne vybrať 4 najmladšie korytnačky znamená nájsť 4 korytnačky s najkratšími prezývkami. Pre výber týchto korytnačiek zo zoznamu máme viacero riešení. Prvým je prechod zoznamom za pomoci cyklu s pevným počtom opakovaní, pričom v každom kroku cyklu overujeme, či aktuálna korytnačka nie je staršia resp. mladšia ako doteraz vybraná najstaršia/najmladšia korytnačka. Po ukončení cyklu vieme, že máme nájdenú najstaršiu/najmladšiu korytnačku. Po uložení korytnačky do výsledného zoznamu, túto korytnačku vymažeme zo zoznamu prihlásených korytnačiek. Pre najstaršie korytnačky zopakujem prechod zoznamom dvakrát pre najmladšie štyrikrát. Napokon po 6 vybraných korytnačkách na začiatku sprievodu doplníme za nimi do zoznamu ostávajúce korytnačky. Výsledný program v jazyku Python môže vyzerať nasledovne: #Python def najdi_najstarsia_korytnacka(zoznam): najstarsia_korytnacka = zoznam[0] for korytnacka in zoznam: if len(najstarsia_korytnacka) < len(korytnacka): najstarsia_korytnacka = korytnacka return najstarsia_korytnacka def najdi_najmladsia_korytnacka(zoznam): najmladsia_korytnacka = zoznam[0] for korytnacka in zoznam: if len(najmladsia_korytnacka) < len(korytnacka): najmladsia_korytnacka = korytnacka return najmladsia_korytnacka def rozdelenie(zoznam): if len(zoznam) < 6: return []' zoznam = zoznam.copy() usporiadany_zoznam = [] for i in range(2): korytnacka = najdi_najstarsia_korytnacka(zoznam) usporiadany_zoznam.append(korytnacka) zoznam.remove(korytnacka) for i in range(4): korytnacka = najdi_najmladsia_korytnacka(zoznam) usporiadany_zoznam.append(korytnacka) zoznam.remove(korytnacka) usporiadany_zoznam.extend(zoznam) return usporiadany_zoznam Ďalším riešením ako môžeme v zozname nájsť najstaršie a najmladšie korytnačky je použitie príkazu sorted, ktorý vráti usporiadaný zoznam. Štandardne tento príkaz usporiadáva prvky zoznamu podľa abecedy, čo nám v tomto prípade ale nevyhovuje, lebo potrebujeme prvky zoznamu usporiadať podľa ich dĺžky. Na to slúži parameter key, ktorému povieme, že zoznam chceme usporiadať podľa dĺžky prvkov zoznamu. V usporiadanom zozname máme na začiatku najmladšie korytnačky a na konci najstaršie korytnačky. Zo zoznamu pomocou výrezov vyberieme 2 najstaršie (s krokom -1) a následne 4 najmladšie korytnačky. Alternatívne riešenie v jazyku Python môže vyzerať nasledovne: #Python def rozdelenie(zoznam): if len(zoznam) < 6: return [] zoznam = zoznam.copy() usporiadany_zoznam = sorted(zoznam, key=len) vysledok = usporiadany_zoznam[-1:-3:-1] + \ usporiadany_zoznam[:4] + \ usporiadany_zoznam[4:-2] return vysledok Posledným spôsobom je úprava prvého riešenia za použitia funkcií max a min, ktoré vrátia maximálny a minimálny prvok zoznamu. Štandardne tieto funkcie vyberajú prvky zoznamu podľa abecedného poradia. Preto opäť použijeme parameter key, pomocou ktorého určíme spôsob výberu maximálneho a minimálneho prvku podľa dĺžky prvkov zoznamu. Vylepšené prvé riešenie úlohy v jazyku Python môže vyzerať nasledovne: #Python def rozdelenie(zoznam): if len(zoznam) < 6: return [] usporiadany_zoznam = [] for i in range(2): najstarsia_korytnacka = max(zoznam, key=len) usporiadany_zoznam.append(najstarsia_korytnacka) zoznam.remove(najstarsia_korytnacka) for i in range(4): najmladsia_korytnacka = min(zoznam, key=len) usporiadany_zoznam.append(najmladsia_korytnacka) zoznam.remove(najmladsia_korytnacka) usporiadany_zoznam.extend(zoznam) return usporiadany_zoznam Vaše najčastejšie chyby a zaujímavé riešenia Plný počet bodov za riešenie tejto úlohy získal len jeden tím oliverseman, ktorému gratulujeme. Medzi najčastejšie chyby v súťažných riešeniach patrilo:
|
||||||||||
© Univerzita Pavla Jozefa Šafárika v Košiciach, Prírodovedecká fakulta, Ústav informatiky palmaj (zavinac) upjs.sk |