Autorské riešenie
Rozdelenie hodnôt do troch, štyroch, či piatich intervalov rovnakej šírky s výpisom hraníc týchto intervalov je možné riešiť viacerými spôsobmi. Celý postup riešenia by sme mohli rozdeliť do týchto piatich krokov:
Nasleduje možný zdrojový kód v jazyku Python # Pythonimport math def zisti_exponent(cislo): # najde exponent mocniny cisla 10 vo vedeckom zapise cisla exponent = len(str(round(cislo))) - 1 return exponent def zaokruhli_najvyznamnejsiu_cifru_hore(cislo): exponent = zisti_exponent(cislo) return math.ceil(cislo / 10 ** exponent) * 10 ** exponent def zaokruhli_na_rad_dole(cislo, exponent): # zaokruhli dole na exponent cisla 10 vo vedeckom zapise cisla # 0 - na jednotky, 1 - na desiatky, 2 - na stotiny a podobne return math.floor(cislo / 10 ** exponent) * 10 ** exponent def generuj_skupiny(min, max): min = zaokruhli_na_rad_dole(min, zisti_exponent(max)) max = zaokruhli_najvyznamnejsiu_cifru_hore(max) rozdiel = max - min # urcime pocet intervalov prva_cifra = str(rozdiel)[0] if prva_cifra in '369': pocet_intervalov = 3 elif prva_cifra in '248': pocet_intervalov = 4 else: pocet_intervalov = 5 # vratime hranice intervalov, ktore si ulozime do pola sirka_intervalu = rozdiel / pocet_intervalov intervaly = [] for i in range(pocet_intervalov): intervaly.append(min + sirka_intervalu * i) intervaly.append(max) return intervaly Vaše zaujímavé riešenia a najčastejšie chyby Úlohu riešilo 32 tímov. Väčšina tímov použila na nájdenie exponentov prvý spôsob, cez dĺžku reťazca. Niektoré tímy využili aj logaritmus. Tretí spôsob, cez f-string, sa v riešeniach neobjavil. Vyskytli sa viaceré originálne riešenia s kratším, menej čitateľným, ale aj dlhším, detailne okomentovaným zdrojovým kódom. Väčšina tímov správne určila počet intervalov aj ich hranice. Najčastejšie chyby spočívali v nesprávnom zaokrúhľovaní (použitie iba jednoduchého matematického zaokrúhľovania alebo opakovane, ak bolo najväčšou hodnotou číslo 9000, za hornú hranicu intervalov ste vybrali hodnotu 10000), ale aj pri výpise hraníc, kde viaceré tímy intervaly začali vypisovať od 0 aj v prípade, že na vstupe boli hodnoty napríklad 1113 a 1234 (v takom prípade je dolná hranica 1000 a horná hranica 2000). Niektoré tímy s programovaním v Pythone iba začínajú, a teda sa im podarilo vyriešiť aspoň načítanie vstupov a niektoré základné matematické operácie.
|
||||||||||
© Univerzita Pavla Jozefa Šafárika v Košiciach, Prírodovedecká fakulta, Ústav informatiky palmaj (zavinac) upjs.sk |