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