Добрый день. Не могли бы Вы помочь разобраться в задании 12, номер 203. Я попробовала написать программу на Паскале. Обычно все задачи решаются, я даже вручную не могу понять, что там происходит.
203) (С.С. Поляков, Саратов) Исполнитель Редактор получает на вход строку цифр и преобразовы-вает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки символов.
заменить (v, w)
нашлось (v)
Первая команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Если це-почки v в строке нет, эта команда не изменяет строку. Вторая команда проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает ло-гическое значение "истина", в противном случае возвращает значение "ложь".
Дана программа для исполнителя Редактор:
НАЧАЛО
ПОКА нашлось (111)
заменить (111, 2)
заменить (222, 3)
заменить (333, 1)
КОНЕЦ ПОКА
КОНЕЦ
Какая строка получится в результате применения приведённой программы к строке вида 1…13…3 (2018 единиц и 2050 троек)?
var i:integer;s:string;
begin
for i:=1 to 2018 do s:=s+'1';
for i:=1 to 2050 do s:=s+'3';
var p1 := Pos('111',s);
var p2 := Pos('222',s);
var p3:= pos('333',s);
while (p1 <> 0) do
begin
if (p1 > 0) then
begin
Delete( s, p1 ,3 );
Insert( '2', s, p1 );
end;
if (p2>0) then
begin
Delete( s, p2, 3 );
Insert( '3', s, p2 );
end;
if (p3>0) then
begin
Delete( s, p3, 3 );
Insert( '1', s, p3 );
end;
p1 := Pos('111',s);
p2 := Pos('222',s);
p3:= pos('333',s);
end;
write(s);
end.