Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих
А) заменить (v, w).
Эта команда заменяет в строке первое слева вхождение
Если в строке нет вхождений
Б) нашлось (v).
Эта команда проверяет, встречается ли
исполнителя при этом не изменяется.
Цикл
ПОКА условие
последовательность команд
КОНЕЦ ПОКА
выполняется, пока условие истинно.
В конструкции
ЕСЛИ условие
ТО команда1
КОНЕЦ ЕСЛИ
выполняется команда1 (если условие истинно).
В конструкции
ЕСЛИ условие
ТО команда1
ИНАЧЕ команда2
КОНЕЦ ЕСЛИ
выполняется команда1 (если условие истинно) или команда2 (если условие ложно).
Дана программа для Редактора:
НАЧАЛО
ПОКА нашлось (11)
ЕСЛИ нашлось (112)
ТО заменить (112, 6)
ИНАЧЕ заменить (11, 3)
КОНЕЦ ПОКА
КОНЕЦ
Исходная строка содержит десять единиц и три двойки, других цифр нет, точный порядок расположения единиц и двоек неизвестен. Какую наибольшую сумму цифр может иметь строка, которая получится после выполнения программы?
Сумма цифр будет наибольшей, если строка будет выглядеть, например, таким образом: 1121121121111. В этом случае алгоритм три раза заменит последовательность
Ответ: 24.
Приведём решение Муравьева Константина на языке Python.
from itertools import product
al = []
maxx = 0
for i in product('12', repeat=13):
i = str(''.join(i))
if i.count('1') == 10 and i.count('2') == 3:
if not(i in al):
al.append(i)
for a in al:
c = 0
while '11' in a:
if '112' in a:
a = a.replace('112','6',1)
else:
a = a.replace('11','3',1)
for k in a:
c = c + int(k)
if c > maxx:
maxx = c
print(maxx)
Приведём решение Михаила Глинского на языке Python.
s='112'*3+'1'*4
while '11' in s :
if '112' in s:
s=s.replace('112','6',1)
else:
s=s.replace('11','3',1)
print(s.count('6') * 6 + s.count('3') * 3)
Приведём решение Александра Ковалерова на языке Python.
s='12'
z=[]
for a1 in s:
for a2 in s:
for a3 in s:
for a4 in s:
for a5 in s:
for a6 in s:
for a7 in s:
for a8 in s:
for a9 in s:
for a10 in s:
for a11 in s:
for a12 in s:
for a13 in s:
w=a1+a2+a3+a4+a5+a6+a7+a8+a9+a10+a11+a12+a13
if w.count('1')==10 and w.count('2')==3:
while '11'in w:
if '112'in w:
w=w.replace('112','6',1)
else:
w=w.replace('11','3',1)
z.append(sum(int(i) for i in w))
else:
break
print(max(z))
Приведём решение Андрей Бугорского на языке Python.
import random
l = []
for i in range(1,1000):
n = [1,1,1,1,1,1,1,1,1,1,2,2,2]
z = random.shuffle(n)
x = str(n[0]) + str(n[1]) + str(n[2]) + str(n[3]) + str(n[4]) + str(n[5]) + str(n[6]) + str(n[7]) + str(n[8]) + str(n[9]) + str(n[10]) + str(n[11]) + str(n[12])
while '11' in x:
if '112' in x:
x = x.replace('112', '6', 1)
else:
x = x.replace('11', '3', 1)
x = str(x)
l.append(int(x[0]) + int(x[1]) + int(x[2]) + int(x[3]) + int(x[4]))
print(max(l)))
Приведём решение Магомеда Мирзоева на языке Python.
import itertools
def process(s):
while '11' in s:
if '112' in s:
s = s.replace('112', '6', 1)
else:
s = s.replace('11', '3', 1)
return s
max_sum = 0
for positions in itertools.combinations(range(13), 3):
arr = ['1'] * 13
for pos in positions:
arr[pos] = '2'
s = ''.join(arr)
processed = process(s)
current_sum = sum(int(c) for c in processed)
if current_sum > max_sum:
max_sum = current_sum
print(max_sum)

