Autorské riešenie
[stiahni py]                                       

  • Počet riešiteľov: 10 / 11 = 91 %

  • Úspešnosť riešenia: 4,5 / 6 = 75 %

Máme zadané heslo, pre ktoré chceme overiť jeho bezpečnosť. Heslo považujeme za bezpečné práve vtedy, keď obsahuje minimálne 11 znakov, z toho:

  • aspoň 1 malé písmeno
  • aspoň 1 veľké písmeno
  • aspoň 1 číslicu
  • aspoň 1 špeciálny znak

Funkcia by mala overiť, či heslo spĺňa všetky uvedené podmienky. Môžeme začať so zistením dĺžky reťazca funkciou len(). Ak má reťazec menej ako 11 znakov, vieme s určitosťou povedať, že heslo nie je bezpečné. Ak má reťazec aspoň 11 znakov, vytvoríme si 4 premenné typu boolean inicializované na hodnotu False. Premenné budú označovať (ne)prítomnosť malého a veľkého písmena, číslice a špeciálneho znaku v reťazci.

V cykle prechádzame reťazcom znak po znaku a pomocou podmienok zisťujeme, do ktorej skupiny znakov aktuálny znak patrí. Funkciou islower() vieme zistiť či je znak malé písmeno, funkciou isupper() či je znak veľké písmeno a funkciou isdigit() či je znak číslicou. Akýkoľvek iný znak (napr. bodka, hviezdička, výkričník) môžeme považovať za špeciálny.

Podľa toho ktorá z podmienok je pre aktuálny znak splnená meníme v príslušnej premennej hodnotu False na hodnotu True. Ak majú po skočení cyklu všetky 4 premenné hodnotu True, funkcia je_bezpecne tiež vráti True (= je bezpečné), inak False (= nie je bezpečné).

#Python
def je_bezpecne(heslo):
    if len(heslo) < 11:
        return False
    obsahuje_male = False
    obsahuje_velke = False
    obsahuje_cislicu = False
    obsahuje_specialny = False
    for i in heslo:
        if i.islower():
            obsahuje_male = True
        elif i.isupper():
            obsahuje_velke = True
        elif i.isdigit():
            obsahuje_cislicu = True
        else:
            obsahuje_specialny = True
    return obsahuje_male and obsahuje_velke and obsahuje_cislicu and obsahuje_specialny

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

Plný počet bodov za riešenie tejto úlohy získalo 6 tímov. Niektoré tímy použili namiesto funkcií na zistenie typu znaku porovnávanie znakov (napr. if heslo[i] >= 'a' and heslo[i] <= 'z'), čo bolo tiež správnym riešením.

Najčastejšou chybou bolo zisťovanie špeciálnych znakov na základe porovnávania znaku s malou množinou konkrétnych znakov, ktorá niektoré špeciálne znaky neuvažovala (napr. hviezdičku, výkričník).