(Л. Шастин) Текстовый файл состоит из заглавных букв латинского алфавита S, R, T, V, G и H. Определите в прилагаемом файле минимальное количество идущих подряд символов, среди которых тройка букв RTV (в указанном порядке) встречается ровно 760 раз, при этом искомая последовательность заканчивается буквой T. В ответе запишите число - количество символов в найденной последовательности.
Для выполнения этого задания следует написать программу.
Решение
Индексы троек
🔹 Шаг 1. Читаем файл и запоминаем, сколько троек RTV нужно в окне
s = open("24.txt").read()
k = 760
📌 Читаем файл и запоминаем, сколько троек RTV нужно в окне — ровно 760.
🔹 Шаг 2. Собираем список p — индексы начала всех троек RTV в строке
p = [i for i in range(len(s) - 2) if s[i:i + 3] == "RTV"]
📌 Собираем список p — индексы начала всех троек RTV в строке. Тройки не перекрываются, поэтому каждую считаем отдельно.
🔹 Шаг 3. Перебираем окна из 760 подряд идущих троек: i-я тройка — первая, i +…
mn = len(s)
for i in range(len(p) - k + 1):
📌 Перебираем окна из 760 подряд идущих троек: i-я тройка — первая, i + 759-я — последняя. Чтобы окно было минимальным, начинаем его ровно с буквы R первой тройки.
🔹 Шаг 4. Конец ищем как первую букву T после последней тройки
e = s.find("T", p[i + k - 1] + 3)
if e == -1:
break
mn = min(mn, e - p[i] + 1)
📌 Конец ищем как первую букву T после последней тройки. Следующая тройка RTV сама содержит T, поэтому эта T всегда раньше, чем закончится 761-я тройка. Длина — e − p[i] + 1, берём минимум.
🔹 Шаг 5. Жми RUN
print(mn)
📌 Жми RUN — в выводе будет 146440 (минимальная длина такой последовательности).
✅ Ответ: 146440
🔹 Полный код
s = open("24.txt").read()
k = 760
p = [i for i in range(len(s) - 2) if s[i:i + 3] == "RTV"]
mn = len(s)
for i in range(len(p) - k + 1):
e = s.find("T", p[i + k - 1] + 3)
if e == -1:
break
mn = min(mn, e - p[i] + 1)
print(mn)