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

Шиф­ров­ка со­дер­жит толь­ко за­глав­ные буквы ла­тин­ско­го ал­фа­ви­та (ABCZ). Груп­па из трёх иду­щих под­ряд сим­во­лов, со­дер­жа­щая по од­но­му разу каж­дую из букв A, B и C, счи­та­ет­ся раз­де­ли­те­лем. Раз­де­ли­те­ли могут на­кла­ды­вать­ся друг на друга, на­при­мер, по­сле­до­ва­тель­ность сим­во­лов BCABC счи­та­ет­ся иду­щи­ми под­ряд раз­де­ли­те­ля­ми BCA, CAB и ABC.

При де­шиф­ров­ке раз­де­ли­те­ли уда­ля­ют­ся, раз­би­вая шиф­ров­ку на фраг­мен­ты. Опре­де­ли­те ко­ли­че­ство сим­во­лов в самом длин­ном фраг­мен­те шиф­ров­ки, по­лу­чен­ном после уда­ле­ния раз­де­ли­те­лей.

За­да­ние 24

При­мер.

Пусть шиф­ров­ка со­дер­жит такие сим­во­лы:

BADCBACKLMENBCAAA.

Раз­де­ли­те­ли в этой стро­ке вы­де­ле­ны жир­ным шриф­том. Шиф­ров­ка со­дер­жит три фраг­мен­та: BAD, KLMEN и AA. Самый длин­ный из них со­дер­жит 5 сим­во­лов, в от­ве­те в дан­ном при­ме­ре надо за­пи­сать число 5.

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

Ре­ше­ние.

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

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

 

for x, y, z, w, e in zip(s, s[1:], s[2:], s[3:], s[4:]):

if ''.join(sorted(x + y + z)) == 'ABC' and ''.join(sorted(z + w + e)) == 'ABC':

s = s.replace(x + y + z + w + e, ' ', 1)

elif ''.join(sorted(x + y + z)) == 'ABC' and ''.join(sorted(y + z + w)) == 'ABC':

s = s.replace(x + y + z + w, ' ', 1)

elif ''.join(sorted(x + y + z)) == 'ABC':

s = s.replace(x + y + z, ' ', 1)

 

print(max([len(j) for j in s.split()]))

 

Ответ: 23246.

 

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

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

r = [-3]+[i for i in range(len(s)-2) if sorted(list(s[i:i+3])) == ['A','B','C']]+[len(s)]

print(max([r[i]-r[i-1] for i in range(1,len(r))])-3)

 

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

f = open('24.txt', 'r')

s = f.readline()

s = "ABC" + s + "ABC" #до­бав­ля­ем раз­де­ли­те­ли в на­ча­ле и конце

max_l = 0

delim = [] #создаём спи­сок из по­зи­ций раз­де­ли­те­лей

for i in range(len(s) - 2):

if set([s[i], s[i+1], s[i+2]]) == set(['A', 'B', 'C']): #про­ве­ря­ем трой­ку на раз­де­ли­тель

delim.append(i) #до­бав­ля­ем в спи­сок по­зи­цию раз­де­ли­те­ля

for j in range(len(delim) - 1):

max_l = max(max_l, delim[j + 1] - delim[j] - 3) #на­хо­дим мак­си­маль­ный фраг­мент

print(max_l)


Аналоги к заданию № 58491: 58532 Все