Текстовый файл состоит из десятичных цифр и заглавных букв латинского алфавита. Определите в прилагаемом файле последовательность из максимального количества символов, начинающуюся и заканчивающуюся одной и той же нечётной цифрой, содержащую идущие подряд буквы и не содержащую других цифр, кроме первой и последней. Искомая последовательность должна содержать одинаковое количество гласных и согласных букв. Если таких несколько, выберите последовательность с наибольшим порядковым номером в файле её первого символа. В ответе запишите число – порядковый номер в файле первого символа найденной последовательности. В прилагаемом файле нумерация символов начинается с нуля. Для выполнения этого задания следует написать программу.
Примечание: A, E, I, O, U, Y – гласные буквы латинского алфавита. B, C, D, F, G, H, J, K, L, M, N, P, Q, R, S, T, V, W, X, Z – согласные буквы латинского алфавита.
Решение:
Python. Регулярные выражения
from re import finditer
s = open('24.txt').readline().strip()
vow = 'AEIOUY'
max_len = 0
ans = ''
for g in finditer(r'(?=([13579][A-Z]+[13579]))', s):
tmp = g.group(1)
lt = len(tmp)
if tmp[0] == tmp[-1] and lt >= max_len and lt % 2 == 0:
vc = sum(tmp[1:-1].count(ch) for ch in vow)
if vc == lt // 2 - 1:
max_len = lt
ans = tmp
print(s.find(ans))
Python. Разбиение строки
s = open('24.txt').readline().strip()
sorig = s[::]
vow = 'AEIOUY'
odd = '13579'
max_len = 0
ans = ''
for n in '0123456789':
s = s.replace(n, n + ' ' + n)
arr = s.split()
for cand in arr:
lc = len(cand)
if cand[0] in odd and cand[-1] == cand[0] \
and lc >= max_len and lc % 2 == 0:
if sum(cand[1:-1].count(ch) for ch in vow) == lc // 2 - 1:
max_len = lc
ans = cand
print(sorig.find(ans))
Ответ: \(5165092\)
Эффективно готовьтесь к ЕГЭ по информатике с новым тренажёром, эмулирующем работу станции КЕГЭ, которая используется на реальном экзамене