Текстовый файл состоит из десятичных цифр и заглавных букв латинского алфавита.
Определите в прилагаемом файле максимальное количество идущих подряд символов, среди которых подстрока 2025 встречается не менее 90 раз и при этом содержится ровно 80 букв Y.
В ответе запишите число – количество символов в найденной последовательности.
Для выполнения этого задания следует написать программу.
Решение
Окно
🔹 Шаг 1. Читаем файл в строку и задаём левую границу окна, счётчик вхождений…
s = open("24_8hdCWXt.txt").read()
l = y = c = ans = 0
📌 Читаем файл в строку и задаём левую границу окна, счётчик вхождений «2025», счётчик букв Y и переменную для ответа.
🔹 Шаг 2. Обходим строку слева направо
for r in range(len(s)):
y += s[r] == "Y"
c += r > 2 and s[r-3:r+1] == "2025"
📌 Обходим строку слева направо: на каждом шаге учитываем новую подстроку «2025» и каждую букву Y, попавшую в окно.
🔹 Шаг 3. Сдвигаем левую границу, пока в окне больше 80 букв Y
while y > 80:
y -= s[l] == "Y"
c -= s[l:l+4] == "2025"
l += 1
📌 Сдвигаем левую границу, пока в окне больше 80 букв Y: при выходе символов уменьшаем счётчики «2025» и Y.
🔹 Шаг 4. Если в окне ровно 80 букв Y и не меньше 90 вхождений «2025», обновляем…
if y == 80 and c >= 90:
ans = max(ans, r - l + 1)
📌 Если в окне ровно 80 букв Y и не меньше 90 вхождений «2025», обновляем максимальную длину подходящего фрагмента.
🔹 Шаг 5. Жми RUN
print(ans)
📌 Жми RUN — в выводе будет максимальная длина последовательности.
✅ Ответ: 2981
🔹 Полный код
s = open("24_8hdCWXt.txt").read()
l = y = c = ans = 0
for r in range(len(s)):
y += s[r] == "Y"
c += r > 2 and s[r-3:r+1] == "2025"
while y > 80:
y -= s[l] == "Y"
c -= s[l:l+4] == "2025"
l += 1
if y == 80 and c >= 90:
ans = max(ans, r - l + 1)
print(ans)