Текстовый файл состоит из десятичных цифр от 1 до 9, знаков «+» и «*» (сложения и умножения).
Определите в прилагаемом файле максимальное количество символов в непрерывной последовательности, являющейся корректной записью арифметического выражения, состоящей из не более чем 50 натуральных чисел и знаков арифметических операций между ними.
В ответе укажите количество символов.
##Приведём решение на языке Python.
from re import findall
s = open('24.txt').readline()
maxi = max(findall(r'(?=([1-9]+(?:[+*][1-9]+){49}))',s), key = len)
print(len(maxi))
Ответ: 428.
Приведём решение Тимофея Щербинина на языке Python.
def get_max(s):
maxx = 0
for i in range(0, len(s)-50+1):
summ = 0
for j in range(0, 50):
summ += len(s[j+i]) + 1
summ -= 1
maxx = max(maxx, summ)
return maxx
f = open("24.txt").read()
f = f.replace("+", "*")
f = f.replace("**", " ")
fs = f.split(" ")
maxx = 0
for i in range(0, len(fs)):
fs[i] = fs[i].strip("*")
splited = fs[i].split("*")
if len(splited) <= 50:
maxx = max(maxx, len(fs[i]))
else:
maxx = max(maxx, get_max(splited))
print(maxx)
Приведём решение Юрия Красильникова на языке Python.
def maxlen(s):
a=s.strip('+').split('+') # удаляем плюсы с начала и с конца и разбиваем по плюсам
md=50 # макс. длина
if len(a) <= md: # суммируем длины чисел и прибавляет количество плюсов
return sum(len(x) for x in a) + len(a)-1
else: # перебираем все строки с макс. количеством слагаемых и запоминаем сумму длин
ans=[sum(len(x) for x in a[i:i+md]) for i in range(len(a)-(md-1))]
return max(ans)+(md-1) # добавляем количество плюсов
s=open('24.txt').readline().strip()
a=s.replace('*','+').split('++')
print(max(maxlen(s) for s in a))

