Решение
Найдём позиции всех букв C. Добавим фиктивные позиции -1 и len(s), чтобы удобно обрабатывать начало и конец строки.
Будем брать каждые 30 подряд идущих букв C. Для такого набора левая граница фрагмента может находиться после предыдущей C, а правая граница — перед следующей C.
Так как фрагмент должен начинаться и заканчиваться на A, нужно перемножить количество букв A в левой допустимой зоне и количество букв A в правой допустимой зоне.
s = open('24_A_30_C_01.txt').read().strip()
c = [-1]
for i, ch in enumerate(s):
if ch == 'C':
c.append(i)
c.append(len(s))
ans = 0
k = 30
for i in range(1, len(c) - k):
left_zone_l = c[i - 1] + 1
left_zone_r = c[i]
right_zone_l = c[i + k - 1]
right_zone_r = c[i + k] - 1
left_a = s[left_zone_l:left_zone_r + 1].count('A')
right_a = s[right_zone_l:right_zone_r + 1].count('A')
ans += left_a * right_a
print(ans)
Ответ: 3047.