Шифровка содержит только заглавные буквы латинского алфавита (ABC…Z). Группа из трёх идущих подряд символов, содержащая по одному разу каждую из букв X, Y и Z, считается разделителем. Разделители могут накладываться друг на друга, например последовательность символов YZXYZ считается идущими подряд разделителями YZX, ZXY и XYZ.
При дешифровке разделители удаляются, разбивая шифровку на фрагменты.
Определите количество символов в самом длинном фрагменте шифровки, полученном после удаления разделителей.
Пример.
Пусть шифровка содержит такие символы:
BADZXYZKLMENYZXXX.
Разделители в этой строке выделены жирным шрифтом. Шифровка содержит три фрагмента: BAD, KLMEN и XX. Самый длинный из них содержит
Приведем решение на языке 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('*')]))

