12 задание из ЕГЭ. Редактор. Разбор заданий. | Как составители задания жёстко проиграли (?)
1 Задача
Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки символов.
1. заменить (v, w)
2. нашлось (v)
Первая команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Если цепочки v в строке нет, эта команда не изменяет строку. Вторая команда проверяет, встречается ли цепочка v в строке исполнителя Редактор.
Дана программа для исполнителя Редактор:
НАЧАЛО
ПОКА нашлось (9999) ИЛИ нашлось (333)
ЕСЛИ нашлось (9999)
ТО заменить (9999, 3)
ИНАЧЕ заменить (333, 99)
КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
КОНЕЦ
Какая строка получится в результате применения приведённой выше программы к строке, состоящей из 185 идущих подряд цифр 3? В ответе запишите полученную строку.
РЕШЕНИЕ
s = 185 * '3'while '9999' in s or '333' in s:
if '9999' in s:
s = s.replace('9999', '3', 1)
else:
s = s.replace('333', '99', 1)
print(s)
2 Задача
Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в которых v и w обозначают последовательности цифр.
А) заменить (v,w).
Эта команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Например, выполнение команды заменить (121, 3) преобразует строку 112112 в строку 1312.
Если в строке нет вхождений последовательности v, то выполнение команды не изменяет исходную строку.
Б) Нашлось (v).
Эта команда проверяет, встречается ли последовательность v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь». Строка исполнителя при этом не изменяется.
Дана программа для редактора:
НАЧАЛО
ПОКА нашлось (3333)
заменить (3333, 555)
заменить (5555, 33)
КОНЕЦ ПОКА
КОНЕЦ
Известно, что исходная строка содержала более 123 троек и в ней не было других цифр. Укажите минимально возможную длину исходной строки, при которой в результате работы программы получится строка, содержащая ровно пять троек.
РЕШЕНИЕ
def f(s): while '3333' in s:
s = s.replace('3333', '555', 1)
s = s.replace('5555', '33', 1)
return s
for i in range(123, 10000):
s = f(i*'3')
if s.count('3') == 5:
print(i, s)
exit()
3 Задача
Исполнитель Редактор получает на вход строку цифр и преобразовывает её. На выполнение Редактору дана следующая программа:
НАЧАЛО
ПОКА нашлось (07) ИЛИ нашлось (711) ИЛИ нашлось (777)
ЕСЛИ нашлось (07)
ТО заменить (07, 71)
КОНЕЦ ЕСЛИ
ИНАЧЕ ЕСЛИ нашлось (711)
ТО заменить(711,07)
КОНЕЦ ЕСЛИ
ИНАЧЕ заменить(777,7)
КОНЕЦ ПОКА
КОНЕЦ
На вход программе подана строка состоящая из 120 подряд идущих символов 0, а затем 230 подряд идущих символов 7 и в конце 160 подряд идущих символов 1. В ответ запишите получившуюся строку.
РЕШЕНИЕ
s = '0' * 120 + '7' * 230 + '1' * 160 while '07' in s or '711' in s or '777' in s:
if '07' in s:
s = s.replace('07', '71', 1)
elif '711' in s:
s = s.replace('711', '07', 1)
else:
s = s.replace('777', '7', 1)
print(s)
4 Задача
Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки символов.
1. заменить (v, w)Первая команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Если цепочки v в строке нет, эта команда не изменяет строку. Вторая команда проверяет, встречается ли цепочка v в строке исполнителя Редактор.
2. нашлось (v)
Дана программа для исполнителя Редактор:
НАЧАЛО
ПОКА нашлось (4444) ИЛИ нашлось (777)
ЕСЛИ нашлось (4444)
ТО заменить (4444, 77)
ИНАЧЕ заменить (777, 4)
КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
КОНЕЦ
Какая строка получится в результате применения приведённой выше программы к строке, состоящей из 197 идущих подряд цифр 7? В ответе запишите полученную строку.
РЕШЕНИЕ
s = '7' * 197
while '4444' in s or '777' in s:
if '4444' in s:
s = s.replace('4444', '77', 1)
else:
s = s.replace('777', '4', 1)
print(s)