Dobimo nek niz, recimo mjqjpqmgbljsphdztnvjfqwrcgsmlb
.
Iščemo zaporedje štirih znakov, med katerimi ni nobenega ponovljenega
znaka. Zanima nas, koliko znakov tega niza moramo prebrati, da naletimo
na takšno četvorko.
Drugi del je podoben, le da namesto četvorke iščemo štirinajsterico, ki ne vsebuje ponovljenega znaka.
= open("example.txt").read().strip() data
Gremo čez možne indekse, for i in range(n, len(data))
,
in opazujemo nize data[i - n:i]
, kjer je n
v
prvem delu 4
in v drugem 14
. Vsi njegovi
elementi so različni, če množica njegovih elementov vsebuje točno
n
elementov. Če je tako, izpišemo i
. Rešitev
naloge (obeh delov) je torej
for n in (4, 14):
for i in range(n, len(data)):
if len(set(data[i - n:i])) == n:
break
print(i)
7
19
Bolj zanimiva različica iste ideje sestavi generator, ki bi - če bi
ga pustili - zgeneriral vse i
-je, pri katerih imamo
n
različnih znakov,
(i for i in range(len(data)) if len(set(data[i-n:i])) == n)
.
Zanima nas samo prvi: dobimo ga z next
.
for n in (4, 14):
print(next(i for i in range(len(data)) if len(set(data[i-n:i])) == n))
7
19
Ta rešitev je sicer manj pregledna, časovno pa nič slabša od gornje,
saj v resnici ne zgenerira vseh takšnih n
temveč samo
prvega.