Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих
А) заменить (v, w).
Эта команда заменяет в строке первое слева вхождение
Если в строке нет вхождений
Б) нашлось (v).
Эта команда проверяет, встречается ли
исполнителя при этом не изменяется.
Цикл
ПОКА условие
последовательность команд
КОНЕЦ ПОКА
выполняется, пока условие истинно.
В конструкции
ЕСЛИ условие
ТО команда1
ИНАЧЕ команда2
КОНЕЦ ЕСЛИ
выполняется команда1 (если условие истинно) или команда2 (если условие ложно).
Дана программа для Редактора:
НАЧАЛО
ПОКА нашлось (>1) ИЛИ нашлось (>2) ИЛИ нашлось (>0)
ЕСЛИ нашлось (>1)
ТО заменить (>1, 22>)
КОНЕЦ ЕСЛИ
ЕСЛИ нашлось (>2)
ТО заменить (>2, 2>)
КОНЕЦ ЕСЛИ
ЕСЛИ нашлось (>0)
ТО заменить (>0, 1>)
КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
КОНЕЦ
На вход приведённой выше программе поступает строка, начинающаяся с символа «>», а затем содержащая
Определите наименьшее
Заметим, что данный алгоритм заменит
Ответ: 5.
Приведём другое решение на языке Python.
def is_sim(n):
check = True
for d in range(2, n):
if n % d == 0:
check = False
break
return check
ans = 117
count = 0
while not is_sim(ans):
ans += 4
count+=1
print(count)
Приведём другое решение Адаменко Максима на языке Python.
def is_prime(num):
if num < 2:
return False
for i in range(2, int(num**0.5) + 1):
if num % i == 0:
return False
return True
def replace_operations(s):
while '>1' in s or '>2' in s or '>0' in s:
if '>1' in s:
s = s.replace('>1', '22>', 1)
elif '>2' in s:
s = s.replace('>2', '2>', 1)
elif '>0' in s:
s = s.replace('>0', '1>', 1)
return s
def find_min_n():
n = 0
while True:
s = '>' + '0' * 39 + '1' * n + '2' * 39
result = replace_operations(s)
digit_sum = sum(int(c) for c in result if c.isdigit())
if is_prime(digit_sum):
return n
n += 1
min_n = find_min_n()
print(min_n)
Приведём решение Багримовой Аделины на языке Python.
for n in range(1000):
s='>'+39*'0'+n*'1'+39*'2'
while ('>1' in s) or ('>2' in s) or ('>0' in s):
if '>1' in s:
s=s.replace('>1', '22>')
if '>2' in s:
s=s.replace('>2', '2>')
if '>0' in s:
s=s.replace('>0', '1>')
l=s.count('2')*2+s.count('1')
k=0
for i in range(1, l+1):
if l % i == 0:
k += 1
if k > 2:
break
if k == 2:
print(n)
break
Приведём решение Никиты Юрлова на языке Python.
from random import shuffle
a = []
for n in range(100):
for i in range(50):
s = list('0' * 39 + '1' * n + '2' * 39)
shuffle(s)
s = '>' + ''.join(s)
while ('>1' in s) or ('>2' in s) or ('>0' in s):
if '>1' in s:
s = s.replace('>1', '22>', 1)
if '>2' in s:
s = s.replace('>2', '2>', 1)
if '>0' in s:
s = s.replace('>0', '1>', 1)
suma = s.count('1') + s.count('2') * 2
k = 0
for j in range(2, int(suma**0.5)+1):
if suma % j == 0:
k = 1
break
if k == 0:
a.append(n)
print(min(a))

