Autorské riešenie
[stiahni py]

  • Počet riešiteľov: 14 / 14 = 100 %

  • Úspešnosť riešenia: 6,4 / 7 = 91%

Pri riešení tejto úlohy zoberieme číslo na vstupe, ktoré musíme rozdeliť na cifry. Každú s cifier musíme následne umocniť na druhú a tieto mocniny spočítať. S číslom ktoré takto vznikne opakujeme tento proces až kým na konci sekvencie výpočtov dostaneme číslo, podľa ktorého určíme či pokračujeme ďalej v dalšej sekvencii, alebo výpočet ukončíme a vrátime pravdivostnú hodnotu. Číslo je šťastné, ak každý člen, ktorý je výsledkom výpočtovej sekvencie je šťastné číslo. Tak isto vieme, že ak posledný výsledok výpočtovej sekvencie je číslo jedna, tak je číslo šťastné. Riešenie úlohy je podporené vedomosťou že v intervale 1 až 10 sú šťastné čísla iba tri a to 1, 7 a 10. Ak však rozdelíme číslo 10 na cifry a spočítame ich mocniny tak zistíme, že výsledok bude jedna, čo je výsledok ktorý má mať šťastné číslo na konci sekvencie výpočtov. Na základe tohto poznania vieme, že ak výsledok kroku sekvencie je nižší ako 10 a zároveň je rôzny od čísla 1 a 7, tak určite nemôže byť šťastným číslom.

Dôležitým krokom k vyriešeniu tejto úlohy je správne naprogramovaná funkcia sucet_druhych_mocnin_cifier(). Jej úlohou je spracovávať jednotlivé iterácie výpočtovej sekvencie. Funkcia pomocou použitia operácie modula a delenia rozdelí číslo každej iterácie na jednotlivé cifry, s ktorých potom následne urobí druhú mocninu a spočíta ich.

def sucet_druhych_mocnin_cifier(cislo):
    sucet = 0
    while cislo > 0:
        zvysok = cislo % 10
        cislo = cislo // 10
        sucet = sucet + (zvysok * zvysok)
    return sucet

Potom funkcia je_stastne_cislo() rozhodne, či výpočet danou iteráciou končí (hodnota súčtov mocnín cifier vrátených z funkcie sucet_druhych_mocnin_cifier() je rovná jednej alebo číslu sedem), alebo sa pokračuje na ďalšiu cifru čísla.  

def  je_stastne_cislo(cislo):
    while cislo > 9:
        cislo = sucet_druhych_mocnin_cifier(cislo)
    if cislo == 1 or cislo == 7:
        return True
    else:
        return False

Vaše zaujímavé riešenia a najčastejšie chyby

Túto úlohu riešilo dohromady až 14 tímov. Prekvapivo, až 8 tímov malo riešenie ohodnotené na plný počet bodov. Aj súťažiaci, ktorý nemali plný počet bodov, veľmi dobre pochopili zadanie úlohy a od zisku plného počtu ich delila len malá chyba v riešení. Skoro všetky tímy pracovali s číslom na vstupe ako s reťazcom a žiaden tím nepoužil operáciu modulo a delenia na oddeľovanie číslic. Pri návrhu sa počítalo s tým, že takýto postup pri riešení bude ohodnotený nižším bodovým ziskom. Ale po opravení úloh sa od tejto možnosti upustilo.

Veríme že sa Vám táto úloha páčila a bola pre Vás výzvou.