Izziv: Dovoljena števila

Nadaljuj staro domačo nalogo Prepovedani intervali takole: napiši program, ki pove, koliko je vseh dovoljenih števil med 0 in največjo zgornjo mejo, če so prepovedana vsa števila, ki se nahajajo v naslednjih intervalih (par predstavlja zgornjo in spodnjo mejo; (12, 18), pomeni, da so prepovedana vsa števila od 12 do, vključno, 18).

prepovedani = [
    (12, 18),
    (2, 5),
    (3, 8),
    (0, 4),
    (15, 19),
    (6, 9),
    (13, 17),
    (4, 8)
]

V gornjem primeru mora izpisati 2, saj sta dovoljeni dve števili, 10 in 11.

Potem pa se spopadi z intervali iz datoteke intervali.txt, ki je pripeta k nalogi.

Branja datotek se še nismo učili. Lahko se potrudiš sam(a), lahko pa uporabiš naslednjo vrstico:

intervali = [tuple(int(x) for x in vrstica.split("-")) for vrstica in open("intervali.txt")]

Še en zanimiv izziv je naslednji: recimo, da tvoj računalnik ne bi imel niti toliko pomnilnika, da bi lahko shranil celotno tabelo intervalov. Če hočeš večkrat prek tabele, moraš večkrat odpreti datoteko in jo brati. Z drugimi besedami: nimamo seznamov (ali terk, slovarjev, množic ...), le posamične int-e in datoteke (ter, očitno, niz s posamično vrstico, ki jo dobiš iz datoteke, ter seznam z dvema nizoma, ki ga vrne split te vrstice). Napiši program, ki kljub tem omejitvam v doglednem času reši nalogo. Recimo tako, da čim manjkrat prebere datoteko.