Текстовый файл состоит из цифр 0, 1, 2, 3, 4 и знаков арифметических операций «-» (вычитание) и «*» (умножение).
Определите максимальное количество символов в непрерывной последовательности, которая является корректным арифметическим выражением с целыми неотрицательными числами.
В этом выражении никакие два знака арифметических операций не могут стоять рядом, в записи чисел отсутствуют незначащие (ведущие) нули и число 0 не имеет знака.
В ответе запишите число — количество символов в найденной последовательности.
Для выполнения этого задания следует написать программу.
Решение
🔹 Шаг 1. Импортируем finditer и читаем файл в строку.
from re import finditer
s = open("24.txt").read()
📌 Импортируем finditer и читаем файл в строку.
🔹 Шаг 2. Задаём шаблон числа: либо одиночный ноль, либо цифра от 1 до 4 и…
num = r"([1234][01234]*|0)"
📌 Задаём шаблон числа: либо одиночный ноль, либо цифра от 1 до 4 и дальше любые цифры 0–4 — без лишних ведущих нулей.
🔹 Шаг 3. Собираем регулярное выражение для корректного выражения
reg = rf"{num}([-*]{num})+"
📌 Собираем регулярное выражение для корректного выражения: число, затем один или несколько фрагментов «операция минус или умножение плюс число».
🔹 Шаг 4. Ищем все совпадения finditer и выбираем самое длинное по числу символов.
mx = max((x.group() for x in finditer(reg, s)), key=len, default="")
📌 Ищем все совпадения finditer и выбираем самое длинное по числу символов.
🔹 Шаг 5. Жми RUN
print(len(mx))
📌 Жми RUN — в выводе будет 933 (максимальная длина корректного арифметического выражения).
✅ Ответ: 933
🔹 Полный код
from re import finditer
s = open("24.txt").read()
num = r"([1234][01234]*|0)"
reg = rf"{num}([-*]{num})+"
mx = max((x.group() for x in finditer(reg, s)), key=len, default="")
print(len(mx))