Всё про 24 номер ЕГЭ инфа:
Откуда:
https://vkvideo.ru/video-205865487_456240469?t=29m59s
https://vk.com/video-184870282_456257255
https://vk.com/video-205865487_456239724
https://vkvideo.ru/video-205865487_456239725?ref_domain=yastatic.net
https://colab.research.google.com/drive/1dVP0unQlHtybjqh7xOJeqZDpq9SYBZlX#scrollTo=e4b9eda5
Насчет регулярок:
1)Используем библиотеку re
2)Пример использования sub.
3) конструкция (?:pattern) - только нужные символы возращаются
конструкция (?=зфееукт) - поиск всех возможных
4) Пример использования findall().
1. ЗАМЕНА ОБЫЧНАЯ
Текстовый файл состоит не более чем из 1200000 символов, которые являются прописными буквами латинского алфавита. Определите максимальное количество идущих подряд символов, среди которых нет символов G, W, P.
s = open('').readline()
s = sub('[GWD]', ' ', s)
print(max(map(len, s.split())))
2. ЗАМЕНА ПАРНАЯ ОДИНАКОВЫХ БУКВ
Текстовый файл состоит из символов P, Q, R и S.
Определите максимальное количество идущих подряд символов в прилагаемом файле, среди которых нет идущих подряд символов P.
s = sub(r'PP', 'P P', s)
print(max(map(len, s.split())))
или
s = sub(r'P(?=P)', 'P ', s)
print(max(map(len, s.split())))
3. ЗАМЕНА ПАРНАЯ РАЗНЫХ БУКВ
Текстовый файл состоит не более, чем из 10**7 строчных букв английского алфавита. Найдите максимальную длину подстроки, в которой символы a и d не стоят рядом.
s = sub(r'a(?=d)|d(?=a)', '* ', s)
4. ЗАМЕНА ЛЮБЫХ ПАРНЫХ ОДИНАКОВЫХ БУКВ
Текстовый файл состоит не более чем из 106 символов X, Y и Z. Определите максимальное количество идущих подряд символов, среди которых каждые два соседних различны.
s = sub(r'(.)(?=\1)', r'\1 ', s)
5. ЗАМЕНА КОМБИНАЦИЙ ОПРЕДЕЛЕННЫХ БУКВ
Текстовый файл состоит не более, чем из 1 200 000 прописных символов латинского алфавита. Определите максимальное количество идущих подряд символов, среди которых любые два символа из набора Q, R, S в различных комбинациях (с учётом повторений) не стоят рядом.
s = sub(r'[QRS](?=[QRS])', r'\1 ', s)
6. ЗАМЕНА КОМБИНАЦИЙ БУКВ ЛИБО ЦИФР
Текстовый файл состоит из символов, обозначающих буквы латинского алфавита А, В и С и цифры 8 и 9.
Определите в прилагаемом файле максимальное количество идущих подряд символов, среди которых ни одна буква не стоит рядом с буквой, а цифра — с цифрой.
s = sub(r'([A-Z](?=[A-Z]))|([0-9](?=[0-9]))', r'\1 ', s)
1. ПАРЫ
Найдите максимальное количество подряд идущих пар символов АС или АВ. Искомая подстрока может включать только пары АВ, только пары АС или содержать одновременно как пары АС, так и пары АВ.
print(max(map(len, findall(r'(?:AB|AC)+', s))) // 2)
2. ГЛАСНЫЕ И СОГЛАСНЫЕ
Текстовый файл состоит из символов A, B, C, D и O. Определите максимальное количество идущих подряд пар символов вида
согласная + гласная
print(max(map(len, findall(r'(?:[BCD][AO])+', s)))//2)
3. ЧЕРЕДОВАНИЕ
Текстовый файл состоит из символов E, D и F. Определите максимальную длину непрерывной последовательности символов, состоящей из чередующихся символов E и F в прилагаемом файле. Искомая последовательность может начинаться как с символа E, так и с символа F.
print(max(map(len, findall(r'(?:EF)+E?|(?:FE)+F?', s))))
4. ЦИФРЫ
Текстовый файл состоит из символов, обозначающих заглавные буквы латинского алфавита и цифры от 1 до 9 включительно. Определите в прилагаемом файле максимальное количество идущих подряд символов, которые могут представлять запись числа в шестнадцатеричной системе счисления.
print(max(map(len, findall(r'[1-9A-F](?:0-9A-F)*', s))))
5. ГРОБ НА АРИФМЕТИКУ
Текстовый файл состоит из десятичных цифр, знаков «+» и «*» (сложения и умножения). Определите максимальное количество символов в непрерывной последовательности, являющейся корректным арифметическим выражением с целыми неотрицательными числами (без знака), значение которого равно нулю. В этом выражении никакие два знака арифметических операций не стоят рядом, порядок действий определяется по правилам математики. В записи чисел отсутствуют незначащие (ведущие) нули.
I способ:
from re import *
s = open('24_17685.txt').readline()
num = r'([1-9][0-9]*|0)'
proiz = rf'(({num}\*)*0(\*{num})*)'
reg = rf'{proiz}(\+{proiz})+'
print(len(max([x.group() for x in finditer(reg, s)], key=len)))
II способ:
from re import *
s = open('24_17685.txt').readline()
num = r'(?:[1-9][0-9]*|0)'
proiz = rf'(?:(?:{num}\*)*0(?:\*{num})*)'
reg = rf'{proiz}(?:\+{proiz})+'
print(max(map(len, findall(reg, s))))