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

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

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

За­да­ние 24

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

Ре­ше­ние.

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

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

buk = 'QWERTYUIOPASDFGHJKLZXCVBNM'

mini = 10**10

pos = []

i = 0

while i < len(s):

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

pos.append(i - 1)

while s[i] not in buk:

i += 1

if len(pos) >= 10000:

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

i += 1

print(mini)

 

Ответ: 68613.

 

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

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

k = 10000

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

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

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)]))