Autorské riešenie
[stiahni monitoring.py]

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

  • Úspešnosť riešenia: 1,13 / 6 = 19 %

Pri riešení tejto úlohy musíme čísla zoznamu idúce bezprostredne za sebou zapísať ako interval. Podľa zadania je zoznam čísiel už usporiadaný. Čísla z jedného intervalu sú teda zapísané postupne, za sebou.

Riešenie nájdeme pomerne jednoducho. Budeme postupne prechádzať číslami zoznamu a kontrolovať, či tvoria postupnosť za sebou idúcich prirodzených čísiel. Ak nejaké číslo poruší túto postupnosť, tak z prejdenej postupnosti vytvoríme interval a pokračujeme ďalej, pričom začíname budovať novú postupnosť.

Výsledné riešenie môže vyzerať nasledovne: 

def cisla_do_intervalov(cisla):
    intervaly = []
    idx = 0
    while idx < len(cisla):
        zac_idx = idx
        while idx + 1 < len(cisla) and cisla[idx] + 1 == cisla[idx + 1]:
            idx += 1
        if zac_idx == idx:
            intervaly.append(f'{cisla[idx]}')
        else:
            intervaly.append(f'{cisla[zac_idx]} - {cisla[idx]}')
        idx += 1
    return intervaly  

Keďže potrebujeme vzájomne porovnávať susedné dvojice čísiel, pristupujeme k nim cez indexy. V tomto prípade si však musíme "ustrážiť" , aby sme nepristupovali k indexu, ktorý v zoznamu už nie je (while idx < len(cisla)). Na začiatku si zapamätáme index prvého čísla (zac_idx = idx) a pokiaľ čísla za sebou tvoria neprerušenú postupnosť (cisla[idx] + 1 == cisla[idx + 1]) postupujeme v zozname ďalej. Keď nájdeme číslo, ktoré do postupnosti už nepatrí, prejdenú postupnosť vložíme ako interval do zoznamu intervaly a pokračujeme v prehľadávaní od tohto čísla ďalej. Všimnime si, že špeciálnym prípadom je, ak neprerušenú postupnosť tvorí len jedno číslo. Vtedy ho neuložíme ako interval, ale len ako samostatné číslo.

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

Najväčší problém zrejme spôsobila skutočnosť, že v zozname sa pohybujeme v dvoch líniách. V prvej línii si "strážime" či sme už spracovali celý zoznam (a neprešli sme za koniec zoznamu) a v druhej či postupujeme rastúcou postupnosťou (a neprešli sme za koniec zoznamu). Navyše sú tieto línie vzájomne prepojené. V každom riešení bol použitý cyklus for, čo úlohu trochu skomplikovalo a časť vašich programov skončila s chybou "list index out of range".