Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих
А) заменить (v, w).
Эта команда заменяет в строке первое слева вхождение
Если в строке нет вхождений
Б) нашлось (v).
Эта команда проверяет, встречается ли
исполнителя при этом не изменяется.
Цикл
ПОКА условие
последовательность команд
КОНЕЦ ПОКА
выполняется, пока условие истинно.
В конструкции
ЕСЛИ условие
ТО команда1
КОНЕЦ ЕСЛИ
выполняется команда1 (если условие истинно).
В конструкции
ЕСЛИ условие
ТО команда1
ИНАЧЕ команда2
КОНЕЦ ЕСЛИ
выполняется команда1 (если условие истинно) или команда2 (если условие ложно).
Дана программа для редактора:
НАЧАЛО
ПОКА НЕ нашлось (00)
заменить (01, 210)
заменить (02, 3101)
заменить (03, 2012)
КОНЕЦ ПОКА
КОНЕЦ
Известно, что исходная строка начиналась с нуля и заканчивалась нулём, а между ними содержала только единицы, двойки и тройки. После выполнения данной программы получилась строка, содержащая
Заметим, что порядок цифр между нулями в исходной строке не важен.
Пусть строка 01 — x, 02 — y, 03 — z. Аналогично составим уравнение для двоек и троек. Получаем систему:
Вычитая из первого уравнение второе, получим y = 11, тогда из третьего уравнения z = 7. Тогда, подставив
Ответ: 38.
Приведём другое решение Владимира Артамонова на языке Python.
for one in range(50):
for two in range(50):
for three in range(50):
s = "0"+ "1" * one + "2" * two + "3" * three + "0"
s_original = s
while "00" not in s:
s = s.replace("01", "210", 1)
s = s.replace("02", "3101", 1)
s = s.replace("03", "2012", 1)
if s.count("1") == 61 and s.count("2") == 50 and s.count("3") == 18:
print(len(s_original))
quit()
Приведём другое решение на языке Python.
for k1 in range(61):
for k2 in range(61):
for k3 in range(61):
s='0' + k1*'1' + k2*'2' + k3*'3' + '0'
while '01' in s or '02' in s or '03' in s:
s = s.replace('01', '210', 1)
s = s.replace('02', '3101', 1)
s = s.replace('03', '2012', 1)
if s.count('1') == 61 and s.count('2') == 50 and s.count('3') == 18:
print (k1 + k2 + k3 + 2)

