Текстовый файл состоит из десятичных цифр и заглавных букв латинского алфавита.
Определите в прилагаемом файле минимальное количество идущих подряд символов, среди которых пара символов «20» (в указанном порядке) встречается ровно 26 раз, гласная буква встречается ровно один раз, искомая последовательность заканчивается этой единственной гласной буквой.
В ответе запишите число — количество символов в найденной последовательности.
Для выполнения этого задания следует написать программу.
Примечание. гласные буквы латинского алфавита: A, E, I, O, U, Y.
Решение
Разворот
🔹 Шаг 1. Читаем первую строку файла, убираем лишние пробелы и разворачиваем…
s = open("24.20019.txt").readline().strip()
s = s[::-1]
📌 Читаем первую строку файла, убираем лишние пробелы и разворачиваем строку задом наперёд — так пара «20» из условия превращается в «02».
🔹 Шаг 2. Заменяем гласные E, I, O, U, Y на букву A, окружаем каждую A пробелами…
for i in 'EIOUY':
s = s.replace(i, 'A')
s = s.replace('A', ' A')
a = s.split()
📌 Заменяем гласные E, I, O, U, Y на букву A, окружаем каждую A пробелами и разбиваем строку на части — гласные отделяются как отдельные слова.
🔹 Шаг 3. Задаём большое число для ответа и перебираем части строки, начиная со…
mn = 10**40
for part in a[1:]:
if part.count('02') >= 26:
📌 Задаём большое число для ответа и перебираем части строки, начиная со второй: нас интересуют фрагменты, где «02» встречается не меньше 26 раз.
🔹 Шаг 4. Для подходящей части собираем позиции всех «02» и обновляем минимум…
ind = []
for i in range(len(part) - 1):
if part[i:i + 2] == '02':
ind.append(i)
mn = min(mn, ind[25] + 2)
📌 Для подходящей части собираем позиции всех «02» и обновляем минимум длиной отрезка до конца 26-й такой пары включительно.
🔹 Шаг 5. Жми RUN
print(mn)
📌 Жми RUN — в выводе будет 58 (минимальная длина искомой последовательности).
✅ Ответ: 58
🔹 Полный код
s = open("24.20019.txt").readline().strip()
s = s[::-1]
for i in 'EIOUY':
s = s.replace(i, 'A')
s = s.replace('A', ' A')
a = s.split()
mn = 10**40
for part in a[1:]:
if part.count('02') >= 26:
ind = []
for i in range(len(part) - 1):
if part[i:i + 2] == '02':
ind.append(i)
mn = min(mn, ind[25] + 2)
print(mn)