Пример 1
Исполнитель Редактор получает на вход строку цифр и преобразует её. Команды:
заменить(v, w) — заменяет в строке первое слева вхождение цепочки v на цепочку w;
нашлось(v) — проверяет, встречается ли цепочка v в строке.
Дана программа:
ПОКА нашлось(222) ИЛИ нашлось(888)
ЕСЛИ нашлось(222)
ТО заменить(222, 8)
ИНАЧЕ заменить(888, 2)
КОНЕЦ ЕСЛИ
КОНЕЦ ПОКАКакая строка получится в результате применения программы к строке, состоящей из 70 идущих подряд цифр 8?
Показать решение и ответ
1. Следим за строкой: пока нет 222, заменяется 888 → 2.
70 восьмёрок → 2 + 67 восьмёрок → 22 + 64 → 222 + 61 → теперь есть 222, оно меняется на 8 → 62 восьмёрки.
2. Получился цикл: из 70 восьмёрок стало 62 — каждый раз минус 8.
3. 70 → 62 → 54 → 46 → 38 → 30 → 22 → 14 → 6.
4. Из 6 восьмёрок: 888 → 2, остаётся 2 + 888 → 22. Ни 222, ни 888 нет — программа остановилась.
Проверка программой:
s = '8' * 70 # исходная строка: 70 восьмёрок
while '222' in s or '888' in s: # ПОКА нашлось(222) ИЛИ нашлось(888)
if '222' in s: # ЕСЛИ нашлось(222)
s = s.replace('222', '8', 1) # заменить(222, 8) — только первое вхождение
else: # ИНАЧЕ
s = s.replace('888', '2', 1) # заменить(888, 2)
print(s) # 22Ответ: 22
