Autorské riešenie
Riešenie tejto úlohy môžeme rozdeliť do troch častí. V prvej časti nájdeme najmenšiu hodnotu čítania kníh v zozname. Do nového zoznamu si uložíme všetky indexy kníh, ktoré majú tento najmenší počet prečítaní. V druhej časti zo zoznamu indexov kníh, ktoré majú najmenší počet prečítaní, vyberieme náhodne jeden prvok. Nakoniec, pre tento náhodne zvolený prvok, teda náhodne zvolenú knihu, zo zoznamu najmenej prečítaných kníh, zvýšime počet čítaní tejto knihy o jedna. Je potrebné si tiež uvedomiť, že na vstupe by mali byť len zoznamy, ktorých hodnoty sa líšia najviac o jedna, napr. [3 3 3 4 3 4 3 3 4]. Je totiž zrejmé, že ak použijeme pravidlo zo zadania, tak zabezpečíme, aby čítania týchto kníh prebiehali rovnomerne. Ak sme knihe s najmenším počtom čítaní zvýšili hodnotu o jedna, môže byť v ďalšom kole vybraná iba v prípade, ak túto najmenšiu hodnotu čítaní v predchádzajúcej kole už nemala žiadna iná kniha. Nasledujú moľné riešenia v jazyku Imagine a Python. #imagine viem vyber urobTu "najmenej_citani prvok 1 :pocty_citani prePrvky "pocet_citani :pocty_citani[ ak :pocet_citani < :najmenej_citani [ urobTu "najmenej_citani :pocet_citani ] ] urobTu "indexy_najmenej_citanych [] opakuj pocet :pocty_citani [ ak prvok pocitadlo :pocty_citani = :najmenej_citani [ urobTu "indexy_najmenej_citanych vlozPo pocitadlo :indexy_najmenej_citanych ] ] urobTu "rozpravka_na_citanie ?prvok :indexy_najmenej_citanych urobTu "pocet_citani prvok :rozpravka_na_citanie :pocty_citani urob "pocty_citani nahraď :rozpravka_na_citanie :pocty_citani :pocet_citani + 1 vy :rozpravka_na_citanie koniec #python import random def vyber(pocty_citani): najmenej_citani = min(pocty_citani) indexy_najmenej_citanych = [] for i in range(len(pocty_citani)): if pocty_citani[i] == najmenej_citani: indexy_najmenej_citanych.append(i) rozpravka_na_citanie = random.choice(indexy_najmenej_citanych) pocty_citani[rozpravka_na_citanie] += 1 return rozpravka_na_citanie Všimnime si rozdiel medzi riešením v Imagine logu a v Pythone. V Imagine logu sme využili globálnu premennú :pocty_citani. V Pythone sme počty čítaní poslali v parametri pri volaní funkcie. Zatiaľ čo v Imagine logu musíme najmenší prvok v zozname počtu čítaní nájsť, v Pythone na to použijeme funkciu. Vaše zaujímavé riešenia a najčastejšie chyby Úlohu riešilo 21 tímov. Väčšina tímov použila programovací jazyk Python so správnym riešením. Ak najmenej prečítanými bolo viac rozprávok, súťažiaci na prečítanie vybrali rozprávku náhodne, resp. prvý výskyt takejto rozprávky. V niektorých riešeniach chýbala záverečná časť - zvýšenie počtu prečítaní vybranej rozprávky. Niektorí súťažiaci správne pracovali so zoznamom, ale nepoužili ho ako vstupný parameter, alebo pre vstup nedával program správny výsledok. |
||||||||||
© Univerzita Pavla Jozefa Šafárika v Košiciach, Prírodovedecká fakulta, Ústav informatiky palmaj (zavinac) upjs.sk |