Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих
А) заменить (v, w).
Эта команда заменяет в строке первое слева вхождение
Если в строке нет вхождений
Б) нашлось (v).
Эта команда проверяет, встречается ли
исполнителя при этом не изменяется.
Цикл
ПОКА условие
последовательность команд
КОНЕЦ ПОКА
выполняется, пока условие истинно.
В конструкции
ЕСЛИ условие
ТО команда1
КОНЕЦ ЕСЛИ
выполняется команда1 (если условие истинно).
В конструкции
ЕСЛИ условие
ТО команда1
ИНАЧЕ команда2
КОНЕЦ ЕСЛИ
выполняется команда1 (если условие истинно) или команда2 (если условие ложно).
Дана программа для редактора:
НАЧАЛО
ПОКА нашлось (1111) ИЛИ нашлось (88888)
ЕСЛИ нашлось (1111)
ТО заменить (1111, 888)
ИНАЧЕ заменить (88888, 888)
КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
КОНЕЦ
Какая строка получится в результате применения приведённой выше программы к строке, состоящей из
Заметим, что программа сначала заменит
Ответ: 88881.
Приведем решение Михаила Глинского.
Для нахождения ответа используется программа на языке Питон, выполняющая заданные преобразования строки:
s = '1'*81
while ('1111' in s) or ('88888' in s):
if ('1111' in s):
s = s.replace('1111','888',1)
else:
s = s.replace('88888','888',1)
print(s)
Приведём решение на PascalABC.
var s:string;
begin
s:='1' *81;
while s.Contains('1111') or s.Contains('88888') do
begin
if s.Contains('1111') then
s:=s.Replace('1111','888',1)
else s:=s.Replace('88888','888',1);
end;
writeln(s);
end.

