Исполнитель Редактор получает на вход строку цифр и преобразует её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки цифр.
А) заменить (v, w).
Эта команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Например, выполнение команды
заменить (111, 27)
преобразует строку 05111150 в строку 0527150.
Если в строке нет вхождений цепочки v, то выполнение команды заменить (v, w) не меняет эту строку.
Б) нашлось (v).
Эта команда проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь». Строка исполнителя при этом не изменяется.
Цикл
ПОКА условие
последовательность команд
КОНЕЦ ПОКА
выполняется, пока условие истинно.
Дана программа для редактора:
НАЧАЛО
ПОКА нашлось(4444) ИЛИ нашлось(333)
заменить(444, 3)
ЕСЛИ нашлось(333)
заменить(333, 2)
КОНЕЦ ПОКА
КОНЕЦ
Какая строка получится в результате применения приведённой выше программы к строке, состоящей из 44 идущих подряд цифр 4? В ответе запишите полученную строку.
Решение руками
Проделаем операции над строкой согласно программе и попробуем выявить закономерность.
Будем обозначать повторение символа «
»
раз.
Получившаяся двойка больше не используется в программе, а значит девять четвёрок становятся одной двойкой.
Если продолжнить, то на каком-то шаге мы получим 222244444444. После замены два раза четвёрок на тройки мы получим 22223344 и программа больше не зайдёт в цикл.
Решение программой
s = ’4’ * 44
while ’4444’ in s or ’333’ in s:
s = s.replace(’444’, ’3’, 1)
if ’333’ in s:
s = s.replace(’333’, ’2’, 1)
print(s)