Решение: Преобразование строки редактором
Исполнитель Редактор получает на вход строку цифр и преобразует её. Команда «заменить (v, w)» заменяет в строке первое слева вхождение цепочки v на цепочку w. Если в строке нет вхождений цепочки v, строка не изменяется. Команда «нашлось (v)» проверяет, встречается ли цепочка v в строке, не изменяя строку.
Цикл ПОКА условие последовательность команд КОНЕЦ ПОКА выполняется, пока условие истинно. В конструкции ЕСЛИ условие ТО команда1 ИНАЧЕ команда2 КОНЕЦ ЕСЛИ выполняется команда1, если условие истинно, и команда2 — если условие ложно.
Какая строка получится в результате применения программы к строке, состоящей из 125 идущих подряд цифр 3?
НАЧАЛО
ПОКА нашлось (999) ИЛИ нашлось (333)
ЕСЛИ нашлось (999)
ТО заменить (999, 3)
ИНАЧЕ заменить (333, 9)
КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
КОНЕЦ
Решение по шагам
4 шагаВ начале строки есть только цепочки 333, поэтому команда заменить (333, 9) последовательно сокращает группы троек и образует цифры 9.
По мере появления трёх соседних цифр 9 срабатывает условие нашлось (999), и первое вхождение 999 заменяется обратно на одну цифру 3.
Продолжаем выполнять команды слева направо, каждый раз учитывая, что при наличии 999 выполняется именно замена 999 на 3. После завершения преобразований получается строка 933.
Для строки 933 отсутствуют обе цепочки, проверяемые в условии цикла: 999 и 333. Поэтому цикл прекращается.
Где здесь ошибаются
Всегда выполнять замену 333 на 9 и не учитывать приоритет проверки 999.
Заменять все вхождения цепочки сразу, хотя команда заменяет только первое слева вхождение.
Продолжать цикл после того, как в строке нет ни 999, ни 333.