Исполнитель Редактор получает на вход строку цифр и преобразует её. Редактор может выполнять две команды. Команда нашлось (v) проверяет, встречается ли цепочка v в строке, поданной на вход исполнителя. Команда заменить (v, w) заменяет в строке первое слева вхождение цепочки v на цепочку w. Дана программа для исполнителя Редактор:
НАЧАЛО
ПОКА нашлось (33) ИЛИ нашлось (22)
ЕСЛИ нашлось (33)
ТО заменить (33,2)
ИНАЧЕ заменить (22,3)
КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
КОНЕЦ
Какая строка получится в результате применения приведенной выше программы к строке, состоящей из:
1) 500 идущих подряд цифр 3;
2) 500 идущих подряд цифр 2;
3) 300 идущих подряд цифр 3 и следующих за ними 200 идущих подряд цифр 2.
Давайте рассмотрим каждый из вариантов строк:
1) Строка состоящая из 500 идущих подряд цифр 3.
В начале программы будет выполняться цикл ПОКА нашлось (33) ИЛИ нашлось (22), но в данной строке нет ни цепочки "33" ни цепочки "22", поэтому этот цикл сразу закончится.
Программа перейдет к следующей команде и ничего не произойдет, так как условие нашлось(33) не выполняется.
Затем будет выполнено условие нашлось(22), но и в этом случае в данной строке не встречается цепочка "22", поэтому эта команда также будет проигнорирована.
В итоге, строка останется неизменной и будет состоять из 500 идущих подряд цифр 3.
2) Строка состоящая из 500 идущих подряд цифр 2.
Аналогично, в начале программы будет выполняться цикл ПОКА нашлось (33) ИЛИ нашлось(22), но в данной строке нет ни цепочки "33" ни цепочки "22", поэтому этот цикл сразу закончится.
Программа перейдет к следующей команде и снова ничего не произойдет, так как условие нашлось(33) не выполняется.
Затем будет выполнено условие нашлось(22), и в данной строке найдется первое слева вхождение цепочки "22". Согласно команде заменить(22,3), цепочка "22" будет заменена на цепочку "3".
В итоге, строка станет состоять из 500 идущих подряд цифр 3.
3) Строка состоящая из 300 идущих подряд цифр 3 и следующих за ними 200 идущих подряд цифр 2.
Сначала, в начале программы будет выполняться цикл ПОКА нашлось (33) ИЛИ нашлось (22), и в данной строке присутствует и цепочка "33" и цепочка "22", поэтому этот цикл не завершится.
Программа перейдет к следующей команде, и выполнится условие нашлось(33). В данной строке будет найдено первое слева вхождение цепочки "33", и она будет заменена на цепочку "2".
Строка теперь станет состоять из 299 идущих подряд цифр 2, следующих за ними 200 идущих подряд цифр 2.
Вновь будет проверено условие нашлось(33), но в данной строке цепочки "33" больше не будет найдено.
В следующей команде выполнится условие нашлось(22). Цепочка "22" найдена и будет заменена на цепочку "3".
В итоге, строка станет состоять из 299 идущих подряд цифр 3, следующих за ними 200 идущих подряд цифр 3.
Таким образом, после применения программы к третьей строке, получится строка состоящая из 299 идущих подряд цифр 3, следующих за ними 200 идущих подряд цифр 3.