Задания
Версия для печати и копирования в MS Word
Тип 24 № 84686
i

Тек­сто­вый файл со­сто­ит не более чем из 107 сим­во­лов и со­дер­жит толь­ко за­глав­ные буквы ла­тин­ско­го ал­фа­ви­та и де­ся­тич­ные цифры. Назовём «сло­вом» не­пу­стую не­пре­рыв­ную под­по­сле­до­ва­тель­ность букв, огра­ни­чен­ную циф­ра­ми по обеим сто­ро­нам. Най­ди­те ми­ни­маль­ную длину под­стро­ки, со­дер­жа­щую не менее K  =  10 000 «слов». В от­ве­те ука­жи­те длину най­ден­ной стро­ки.

На­при­мер, в стро­ке AC12BDE3F2ED6 всего три «слова»: BDE, F и ED. При K  =  2 от­ве­том для дан­ной стро­ки будет яв­лять­ся число 6: это под­стро­ка 3F2ED6.

За­да­ние 24

Спрятать решение

Ре­ше­ние.

При­ве­дем ре­ше­ние на языке Python.

s = open('24.txt').readline()[:-2]

cifr = '0123456789'

mini = 10**10

pos = []

i = 0

while i < len(s):

if s[i] not in cifr and s[i-1] in cifr:

pos.append(i - 1)

while s[i] not in cifr:

i += 1

if len(pos) >= 10000:

mini = min(mini, i - pos[-10000] + 1)

i += 1

print(mini)

 

Ответ: 68616.

 

При­ве­дем ре­ше­ние Юрия Кра­силь­ни­ко­ва на языке Python.

s = open('24.txt').readline().strip()

k = 10000

b = [i-1 for i in range(1,len(s)) if s[i-1].isdigit() and s[i].isalpha()]

e = [i for i in range(1,len(s)) if s[i-1].isalpha() and s[i].isdigit()]

if e[0] <= b[0]: e.pop(0)

print(min([e[i+k-1]-b[i]+1 for i in range(len(e)-k+1)]))