Задания
Версия для печати и копирования в MS Word
Тип 24 № 76692
i

Тек­сто­вый файл со­сто­ит из цифр от 1 до 9, зна­ков опе­ра­ций «+», «–» и «*» (сло­же­ние, вы­чи­та­ние и умно­же­ние) и за­глав­ных ла­тин­ских букв A, B, C, D.

Назовём пра­виль­ной сум­мой стро­ку, со­дер­жа­щую по­сле­до­ва­тель­ность из од­но­го или более де­ся­тич­ных чисел, в ко­то­рой между со­сед­ни­ми чис­ла­ми стоит ровно один знак «+» или «-» и нет дру­гих зна­ков.

При­ме­ры пра­виль­ных сумм: «23», «115+6», «1980+12−123−51+3».

Назовём ре­зуль­та­том пра­виль­ной суммы число, ко­то­рое по­лу­чит­ся при вы­пол­не­нии за­пи­сан­ных в со­от­вет­ству­ю­щей стро­ке сло­же­ний. На­при­мер, ре­зуль­тат пра­виль­ной суммы «2+3»  — число 5, а ре­зуль­тат пра­виль­ной суммы «1+2−8+3»  — число −2.

Най­ди­те в дан­ной стро­ке рас­по­ло­жен­ную не­по­сред­ствен­но после буквы С пра­виль­ную сумму с наи­боль­шим ре­зуль­та­том.

В от­ве­те за­пи­ши­те ре­зуль­тат най­ден­ной суммы. Га­ран­ти­ру­ет­ся, что ответ не пре­вы­ша­ет 2 · 109.

За­да­ние 24

Спрятать решение

Ре­ше­ние.

При­ведём ре­ше­ние Юрия Кра­силь­ни­ко­ва на языке Python.

import re

s = re.findall(r'C[1-9]+(?:[+\-][1-9]+)*', open('24.txt').readline())

ans = -10**20

for x in s:

stop = [i for i in range(len(x)) if x[i] in '+-']

stop += [len(x)]

m = max([eval(x[1:t]) for t in stop])

ans = max(ans,m)

print(ans)

 

 

Ответ: 221.

 

При­ведём ре­ше­ние Юрия Кра­силь­ни­ко­ва на языке Python.

def calc(s):

t=0

i=0

while s[i] in '123456789':

t=t*10+int(s[i])

i+=1

ans=[t]

while True:

op=s[i]

if op not in '+-': return max(ans)

i+=1

if s[i] not in '123456789': return max(ans)

t=0

while s[i] in '123456789':

t=t*10+int(s[i])

i+=1

ans.append(ans[-1]+(t if op == '+' else -t))

a = open('24.txt').readline().split('C')[1:]

print(max([calc(x+'!') for x in a if len(x) > 0 and x[0] in '123456789']))