Исполнитель Редактор получает на вход строку цифр и преобразует её. Редактор может выполнять две команды, в обеих
А) заменить (v, w).
Эта команда заменяет в строке первое слева вхождение
Если в строке нет вхождений
Б) нашлось (v).
Эта команда проверяет, встречается ли
Дана программа для Редактора:
НАЧАЛО
ПОКА НЕ нашлось (00)
заменить (033, 21120)
заменить (034, 22120)
заменить (04, 220)
заменить (030, 100)
КОНЕЦ ПОКА
КОНЕЦ
Известно, что в исходной
Приведём аналитическое решение.
Проверим, как меняется после преобразование сумма чисел и их количество:
033 -> 21120 сумма чисел 6 -> 6 количество чисел (без учета 0) 2 -> 4
034 -> 22120 сумма чисел 7 -> 7 количество чисел (без учета 0) 2 -> 4
04 -> 220 сумма чисел 4 -> 4 количество чисел (без учета 0) 1 -> 2
030 -> 100 строка, после которой цикл завершиться.
Можно заметить, что в изначальной строке точно была
Код на языке Python.
def Div(n):
for i in range(2, int(n**0.5)+1):
if n % i == 0:
return False
return True
for i in range(0,31 + 1):
summa = i*3 + (31 - i)*4 + 1
if Div(summa):
print(i + 1)
break
В результате работы программы получаем ответ — 13.
Ответ: 13.
Приведём решение Бориса Савельева на языке Python.
from random import shuffle
a=[]
for i in range (0,20):
for j in range (0,20):
for k in range (0,1000):
s=list('3'*i+'4'*j)
shuffle(s)
s='0'+''.join(s)+'30'
while not '00' in s:
s=s.replace('033','21120',1)
s = s.replace('034', '22120', 1)
s = s.replace('04', '220', 1)
s = s.replace('030', '100', 1)
if len(s)==65:
k=s.count('1')+s.count('2')*2
f=0
for l in range (2,k):
if k%l==0:
f=1
break
if f==0:
a.append(i+1)
print(min(a))

