Шифровка содержит только заглавные буквы латинского алфавита (ABC…Z). Группа из трёх идущих подряд символов, содержащая по одному разу каждую из букв A, B и C, считается разделителем. Разделители могут накладываться друг на друга, например, последовательность символов BCABC считается идущими подряд разделителями BCA, CAB и ABC.
При дешифровке разделители удаляются, разбивая шифровку на фрагменты. Определите количество символов в самом длинном фрагменте шифровки, полученном после удаления разделителей.
Пример.
Пусть шифровка содержит такие символы:
BADCBACKLMENBCAAA.
Разделители в этой строке выделены жирным шрифтом. Шифровка содержит три фрагмента: BAD, KLMEN и AA. Самый длинный из них содержит
Приведем решение на языке 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)

