(В. Лашин) Текстовый файл состоит из десятичных цифр и заглавных букв латинского алфавита.
Определите в прилагаемом файле минимальное количество идущих подряд символов, среди которых гласная буква встречается ровно 12 раз, и после каждой согласной буквы идёт десятичная цифра.
В ответе запишите число - количество символов в найденной последовательности.
Для выполнения этого задания следует написать программу.
Примечание. гласные буквы латинского алфавита: A, E, I, O, U, Y.
Решение
12 гласных
🔹 Шаг 1. Читаем файл в строку s и собираем позиции гласных AEIOUY
s = open("24.txt").read()
vowels = set("AEIOUY")
pos = [i for i, ch in enumerate(s) if ch in vowels]
📌 Читаем файл в строку s и собираем позиции гласных AEIOUY. В подходящем фрагменте их должно быть ровно 12.
🔹 Шаг 2. Считаем префикс bad
bad = [0]
for i in range(len(s) - 1):
flag = s[i].isalpha() and s[i] not in vowels and not s[i + 1].isdigit()
bad.append(bad[-1] + flag)
📌 Считаем префикс bad: согласная, после которой нет цифры, портит любой фрагмент, куда она попала.
🔹 Шаг 3. Перебираем каждые 12 подряд идущих гласных
ans = len(s)
for i in range(len(pos) - 11):
📌 Перебираем каждые 12 подряд идущих гласных. Короткий фрагмент начинается на первой из них и заканчивается на двенадцатой.
🔹 Шаг 4. Если между этими позициями нет плохой согласной, длина right − left +…
left, right = pos[i], pos[i + 11]
if bad[right] - bad[left] == 0:
ans = min(ans, right - left + 1)
📌 Если между этими позициями нет плохой согласной, длина right − left + 1 — кандидат. Запоминаем минимум.
🔹 Шаг 5. Жми RUN
print(ans)
📌 Жми RUN — в выводе будет 17 (минимальная длина подходящей последовательности).
✅ Ответ: 17
🔹 Полный код
s = open("24.txt").read()
vowels = set("AEIOUY")
pos = [i for i, ch in enumerate(s) if ch in vowels]
bad = [0]
for i in range(len(s) - 1):
flag = s[i].isalpha() and s[i] not in vowels and not s[i + 1].isdigit()
bad.append(bad[-1] + flag)
ans = len(s)
for i in range(len(pos) - 11):
left, right = pos[i], pos[i + 11]
if bad[right] - bad[left] == 0:
ans = min(ans, right - left + 1)
print(ans)