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

Шиф­ров­ка со­дер­жит толь­ко за­глав­ные буквы ла­тин­ско­го ал­фа­ви­та (ABCZ). Груп­па из трёх иду­щих под­ряд сим­во­лов, со­дер­жа­щая по од­но­му разу каж­дую из букв X, Y и Z, счи­та­ет­ся раз­де­ли­те­лем. Раз­де­ли­те­ли могут на­кла­ды­вать­ся друг на друга, на­при­мер по­сле­до­ва­тель­ность сим­во­лов YZXYZ счи­та­ет­ся иду­щи­ми под­ряд раз­де­ли­те­ля­ми YZX, ZXY и XYZ.

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

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

За­да­ние 24

При­мер.

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

BADZXYZKLMENYZXXX.

Раз­де­ли­те­ли в этой стро­ке вы­де­ле­ны жир­ным шриф­том. Шиф­ров­ка со­дер­жит три фраг­мен­та: BAD, KLMEN и XX. Самый длин­ный из них со­дер­жит 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)) == 'XYZ' and ''.join(sorted(z + w + e)) == 'XYZ':

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

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

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

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

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

 

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

 

Ответ: 15729.

 

При­ве­дем ре­ше­ние Ми­ха­и­ла Глин­ско­го на языке Python.

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

ds=0

mds=0

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

s1 = s[i+1]+s[i+2]+s[i+3]

ds += 1

mds = max(mds,ds)

if s1.count('X')==1 and s1.count('Y')==1 and s1.count('Z')==1:

ds=0

print(mds - 3)

 

 

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

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

d = ['XYZ','XZY','YXZ','YZX','ZXY','ZYX']

ind = [i for i in range(len(s)-2) if s[i:i+3] in d]

for i in ind: s = s[:i] + '***' + s[i+3:]

print(max([len(x) for x in s.split('*')]))


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