Текстовый файл состоит из цифр 0, 6, 7, 8, 9 и знаков арифметических операций «–» и «*» (вычитание и умножение). Определите максимальное количество символов в непрерывной последовательности, которая является корректным арифметическим выражением с целыми неотрицательными числами. В этом выражении никакие два знака арифметических операций не стоят рядом, в записи чисел отсутствуют незначащие (ведущие) нули и число 0 не имеет знака.
В ответе укажите количество символов.
Ответ:

Демонстрационный вариант ЕГЭ 2027 по информатике – задание №24
Решение:
Для решения задачи удобно использовать регулярные выражения.
Нужно найти самую длинную подстроку, которая является корректным арифметическим выражением.
Используем следующий код:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
from re import * s = open("demo2027_inf_24.txt").readline() num = r'([6789][06789]*|0)' reg = rf'{num}([-*]{num})*' max_len = 0 for i in finditer(reg, s): max_len = max(max_len, len(i.group())) print(max_len) |
Разбор программы
Сначала подключаем модуль для работы с регулярными выражениями:
|
1 |
from re import * |
Затем считываем строку из файла:
|
1 |
s = open("demo2027_inf_24.txt").readline() |
Опишем правильное число:
|
1 |
num = r'([6789][06789]*|0)' |
Регулярное выражение
[6789][06789]*
означает, что первая цифра числа должна быть одной из
6, 7, 8, 9,
а после неё может идти любое количество цифр
0, 6, 7, 8, 9.
Например, подходят числа:
|
1 2 3 4 |
6 70 806 96780 |
Отдельная часть |0 разрешает число 0.
Это нужно для того, чтобы число могло состоять только из одного нуля.
При этом числа с ведущим нулём не подходят:
|
1 2 3 |
06 007 080 |
Теперь составим регулярное выражение для всего арифметического выражения:
|
1 |
reg = rf'{num}([-*]{num})*' |
Оно означает:
сначала идёт правильное число, а затем может идти любое количество фрагментов вида
«операция + число».
В качестве операций разрешены символы:
|
1 2 |
- * |
Например, следующие выражения являются корректными:
|
1 2 3 4 5 |
678 6-7 67*80 6-0*89 789*60-7 |
А такие выражения не подходят:
|
1 2 3 4 5 |
06 6**7 7-*8 *67 89- |
Далее функция finditer() находит все подходящие фрагменты строки:
|
1 |
for i in finditer(reg, s): |
Для каждого найденного выражения вычисляем его длину:
|
1 |
len(i.group()) |
И сохраняем максимальное значение:
|
1 |
max_len = max(max_len, len(i.group())) |
В конце программа выводит длину самого длинного корректного арифметического выражения:
|
1 |
print(max_len) |
Ответ
Программа перебирает все фрагменты строки, подходящие под заданное регулярное выражение,
и выводит максимальную длину корректного арифметического выражения.
Ответ: 154