24 задача ЕГЭ информатики решается регулярками на раз-два
Я 100 лет пользовался регулярками и понимаю как они работают.. но когда я сел решать задачки по информатике я понял что совсем не знаю регулярки ))
Я никогда не пользовался такими мутными регулрками, но !
для решения ЕГЭ они подходят идеально.
Код сбит, сюда скопировал потому что источник может потеряться
Текстовый файл состоит из символов E, D и F. Определите максимальную длину непрерывной последовательности символов, состоящей из чередующихся символов E и F в прилагаемом файле. Искомая последовательность может начинаться как с символа E, так и с символа F.
from re import *s = open('24_6029.txt').readline()max(map(len, findall(r'(?:EF)+E?|(?:FE)+F?', s)))
11
Текстовый файл состоит не более чем из 1200000 символов, которые являются прописными буквами латинского алфавита. Определите максимальное количество идущих подряд символов, среди которых нет символов G, W, P.
s = open('24_1205.txt').readline()
83
Текстовый файл состоит из символов P, Q, R и S.
Определите максимальное количество идущих подряд символов в прилагаемом файле, среди которых нет идущих подряд символов P.
s = open('24_1975.txt').readline()
188
Текстовый файл состоит не более, чем из 107 строчных букв английского алфавита. Найдите максимальную длину подстроки, в которой символы a и d не стоят рядом.
s = open('24_1866.txt').readline()
s = sub(r'a(?=d)|d(?=a)', '* ', s)
2252
Текстовый файл состоит не более чем из 106 символов X, Y и Z.
Определите максимальное количество идущих подряд символов, среди которых каждые два соседних различны.
s = open('24_21.txt').readline()
s = sub(r'(.)(?=\1)', r'\1 ', s)
35
Текстовый файл состоит не более, чем из 1 200 000 прописных символов латинского алфавита. Определите максимальное количество идущих подряд символов, среди которых любые два символа из набора Q, R, S в различных комбинациях (с учётом повторений) не стоят рядом.
s = open('24_7600.txt').readline()
s = sub(r'([QRS])(?=[QRS])', r'\1 ', s)
544
Текстовый файл состоит из символов, обозначающих буквы латинского алфавита А, В и С и цифры 8 и 9.
Определите в прилагаемом файле максимальное количество идущих подряд символов, среди которых ни одна буква не стоит рядом с буквой, а цифра — с цифрой.
from re import *s = open('24_9845.txt').readline()s = sub(r'([ABC])(?=[ABC])', r'\1 ', s)s = sub(r'([89])(?=[89])', r'\1 ', s)max(map(len, s.split()))
18
Текстовый файл состоит не более, чем из 106 символов из набора A, B, C.
Найдите максимальное количество подряд идущих пар символов АС или АВ. Искомая подстрока может включать только пары АВ, только пары АС или содержать одновременно как пары АС, так и пары АВ.
from re import *s = open('24_3228.txt').readline()max(map(len, findall(r'(?:AB|AC)+', s))) // 2
19
Текстовый файл состоит из символов A, B, C, D и O. Определите максимальное количество идущих подряд пар символов вида
from re import *s = open('24_4602.txt').readline()max(map(len, findall(r'(?:[BCD][AO])+', s))) // 2
174
Текстовый файл состоит из символов T, U, V, W, X, Y и Z.
Определите в прилагаемом файле максимальное количество идущих подряд символов (длину непрерывной подпоследовательности), среди которых символ Y встречается не более 150 раз.
from re import *s = open('24_9753.txt').readline()max(len(m[0] + m[1]) for m in findall(r'([^Y]*)(?=((?:Y[^Y]*){,150}))', s))
244
Текстовый файл состоит из символов T, U, V, W, X, Y и Z. Определите в прилагаемом файле максимальное количество идущих подряд символов (длину непрерывной подпоследовательности), среди которых символ T встречается ровно 100 раз.
from re import *s = open('24_10105.txt').readline()max(len(m[0] + m[1]) for m in findall(r'([^T]*)(?=((?:T[^T]*){100}))', s))
133
Текстовый файл состоит из символов A, B, C, D, E и F.
Определите максимальное количество идущих подряд символов в прилагаемом файле, среди которых пара символов CD (в указанном порядке) встречается ровно 160 раз.
from re import *s = open('24_17535.txt').readline()s = sub('CD', '--', s)max(len(m[0] + m[1]) for m in findall(r'(-?[^-]*)(?=((?:--[^-]*){160}-?))', s))
9712
Текстовый файл состоит из символов, обозначающих заглавные буквы латинского алфавита и цифры от 1 до 9 включительно. Определите в прилагаемом файле максимальное количество идущих подряд символов, которые могут представлять запись числа в шестнадцатеричной системе счисления.
Примечание. Цифры, числовое значение которых превышает 9, обозначены латинскими буквами, начиная с буквы А
from re import *s = open('24_9791.txt').readline()max(map(len, findall(r'[1-9A-F][0-9A-F]*', s)))
21
Текстовый файл состоит из символов, обозначающих знаки « – », «*» и цифры 0, 7, 8, 9.
Определите в прилагаемом файле максимальное количество идущих подряд символов, которые образуют математически правильную последовательность, в которую входят знаки «–» или «*» и натуральные числа без незначащих нулей.
from re import *s = open('24_17563.txt').readline()nat = r'(?:[1-9]\d*)'exp = fr'{nat}(?:[-*]{nat})*'max(map(len, findall(exp, s)))
40
Текстовый файл состоит из десятичных цифр, знаков «+» и «*» (сложения и умножения). Определите максимальное количество символов в непрерывной последовательности, являющейся корректным арифметическим выражением с целыми неотрицательными числами (без знака), значение которого равно нулю. В этом выражении никакие два знака арифметических операций не стоят рядом, порядок действий определяется по правилам математики. В записи чисел отсутствуют незначащие (ведущие) нули.
from re import *s = open('24_17641.txt').readline()num = r'(?:[1-9]\d*|0)'prod = fr'(?:(?:{num}\*)*0(?:\*{num})*)'exp = fr'{prod}(?:\+{prod})*'max(map(len, findall(exp, s)))
142