12.04 Исполнитель «Редактор» – прочие прототипы
Ошибка.
Попробуйте повторить позже
Исполнитель Редактор получает на вход строку символов и преобразует её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки символов.
А) заменить (v, w).
Эта команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Например, выполнение команды
заменить (111, 27)
преобразует строку 05111150 в строку 0527150.
Если в строке нет вхождений цепочки v, то выполнение команды заменить (v, w) не меняет эту строку.
Б) нашлось (v).
Эта команда проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь». Строка исполнителя при этом не изменяется.
Цикл
ПОКА условие
последовательность команд
КОНЕЦ ПОКА
выполняется, пока условие истинно.
Дана программа для редактора:
ПОКА нашлось(СОН) или нашлось(ПОН)
ЕСЛИ нашлось(С)
заменить(С, П)
ИНАЧЕ
заменить(ПОН, КЛОН)
КОНЕЦ ПОКА
КОНЕЦ
Какая строка получится в результате применения приведённой выше программы к строке, состоящей из 9 идущих подряд слов ПОСОН? В ответе запишите полученную строку.
Благодаря первому условию все С заменяться на П и мы получим строку, состоящую из 9 идущих подряд слов ПОПОН.
После каждое слово ПОН будет заменено на КЛОН. Значит мы получим 9 слов ПОКЛОН.
Значит ответ — ПОКЛОНПОКЛОНПОКЛОНПОКЛОНПОКЛОНПОКЛОНПОКЛОНПОКЛОНПОКЛОН.
Ошибка.
Попробуйте повторить позже
Исполнитель Редактор получает на вход строку цифр и преобразует её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки цифр.
А) заменить (v, w).
Эта команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Например, выполнение команды
заменить (111, 27)
преобразует строку 05111150 в строку 0527150.
Если в строке нет вхождений цепочки v, то выполнение команды заменить (v, w) не меняет эту строку.
Б) нашлось (v).
Эта команда проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь». Строка исполнителя при этом не изменяется.
Цикл
ПОКА условие
последовательность команд
КОНЕЦ ПОКА
выполняется, пока условие истинно.
Дана программа для редактора:
НАЧАЛО
ПОКА нашлось (444)
заменить (444, 33)
заменить (33, 44)
КОНЕЦ ПОКА
КОНЕЦ
Известно, что исходная строка содержала более 100 четверок и не содержала других цифр. Укажите минимально возможную длину исходной строки, при которой в результате работы этой программы получится строка, содержащая минимально возможное четное количество четверок.
Две замены в цикле преобразуют 444 в 44 (убирает одну четвёрку) пока в строке есть 444.
Так как преобразование убирает одну четверку, не имеет значения длина исходной строки (большая 100), ведь получится в результате одна и та же строка — 44.
Тогда нам ничего не мешает взять наименьшее число большее 100. Это 101.
Ошибка.
Попробуйте повторить позже
Исполнитель Редактор получает на вход строку цифр и преобразует её. Редактор может выполнять две команды, в обеих командах и обозначают цепочки цифр.
А) .
Эта команда заменяет в строке первое слева вхождение цепочки на цепочку . Например, выполнение команды
преобразует строку в строку .
Если в строке нет вхождений цепочки , то выполнение команды заменить не меняет эту строку.
Б) .
Эта команда проверяет, встречается ли цепочка в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь». Строка исполнителя при этом не изменяется.
Цикл
выполняется, пока условие истинно.
Дана программа для редактора:
Известно, что исходная строка содержала более четверок и не содержала других цифр. Укажите минимально возможную длину исходной строки, при которой в результате работы этой программы получится строка, содержащая минимально возможное четное количество четверок.
Изначально не совсем понятно как конечное количество четвёрок зависит от начального. Попробуем проделать вручную операции над несколькими строками. Пусть — начальное количество четверок.
1) : Получили четверок
2) : Получили четверок.
3) : Получили четверок.
Теперь если мы возьмём , то получим , что очень похоже на случай с и при этом в строке снова четверок.
Мы получили закономерность, дальше количество четвёрок будет повторяться .
Значит нам нужно получить четверок в конце. Это возможно только при таком, что его остаток от деления на равен .
Минимальное такое число, большее — .
naim = 10 ** 10 ans = 0 for i in range(101, 1000): s = ’4’ * i while ’4444’ in s: s = s.replace(’444’, ’333’, 1) s = s.replace(’33’, ’44’, 1) if s.count(’4’) % 2 == 0 and s.count(’4’) < naim: ans = i naim = s.count(’4’) print(ans)
Ошибка.
Попробуйте повторить позже
Исполнитель Редактор получает на вход строку символов и преобразует её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки символов.
А) заменить (v, w).
Эта команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Например, выполнение команды
заменить (111, 27)
преобразует строку 05111150 в строку 0527150.
Если в строке нет вхождений цепочки v, то выполнение команды заменить (v, w) не меняет эту строку.
Б) нашлось (v).
Эта команда проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь». Строка исполнителя при этом не изменяется.
Цикл
ПОКА условие
последовательность команд
КОНЕЦ ПОКА
выполняется, пока условие истинно.
Дана программа для редактора:
НАЧАЛО
ПОКА нашлось(LL)
заменить(BU, LL)
ЕСЛИ НЕ нашлось(BULL)
заменить(LLLLLL, CAT)
КОНЕЦ ПОКА
КОНЕЦ
Алгоритм выше превращает быков (BULL) в милых котиков (CAT). При этом котики боятся быков, поэтому пока есть хотя бы один бык котик появляться не будет. Сколько раз алгоритм сделает команду заменить, если в итоге должно получиться ровно два котика?
Алгоритм заменяет все строки BULL на LLLL. Также должно было появится два котика (из двух строк LLLLLL). Значит дожно было получится в промежуточном результате 12 символов L. Это возможно если изначально в строке было три BULL.
Произойдет три замены BU на LL и две замены LLLLLL на CAT. В итоге программа сделает 5 замен.
Ошибка.
Попробуйте повторить позже
Исполнитель Редактор получает на вход строку символов и преобразует её. Редактор может выполнять две команды, в обеих командах и обозначают цепочки символов.
А) .
Эта команда заменяет в строке первое слева вхождение цепочки на цепочку . Например, выполнение команды
преобразует строку в строку .
Если в строке нет вхождений цепочки , то выполнение команды не меняет эту строку.
Б) .
Эта команда проверяет, встречается ли цепочка в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь». Строка исполнителя при этом не изменяется.
Цикл
выполняется, пока условие истинно.
Дана программа для редактора:
Сколько раз встретится буква в строке, полученной после выполнения алгоритма выше для строки состоящей из последовательности букв повторяющейся раз? В ответ укажите только число.
Для решения этого задания напишем программу:
# Создаем исходную строку s = ’ABCDF’ * 60 # Аналог пока нашлось(AB) while ’AB’ in s: # Проводим замену по одному разу s = s.replace(’A’, ’BB’, 1) s = s.replace(’B’, ’CCC’, 1) s = s.replace(’CCCCC’, ’AB’, 1) s = s.replace(’DC’, ’DDF’, 1) s = s.replace(’DF’, ’E’, 1) print(s.count(’E’)) # Вывод количества символов E в строке
Ошибка.
Попробуйте повторить позже
Исполнитель Редактор получает на вход строку символов и преобразует её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки символов.
А) заменить (v, w).
Эта команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Например, выполнение команды
заменить (111, 27)
преобразует строку 05111150 в строку 0527150.
Если в строке нет вхождений цепочки v, то выполнение команды заменить (v, w) не меняет эту строку.
Б) нашлось (v).
Эта команда проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь». Строка исполнителя при этом не изменяется.
Цикл
ПОКА условие
последовательность команд
КОНЕЦ ПОКА
выполняется, пока условие истинно.
Дана программа для редактора:
НАЧАЛО
ПОКА нашлось(LL)
заменить(BU, LL)
ЕСЛИ НЕ нашлось(BULL)
заменить(LLLLLL, CAT)
КОНЕЦ ПОКА
КОНЕЦ
Алгоритм выше превращает быков (BULL) в милых котиков (CAT). При этом котики боятся быков, поэтому пока есть хотя бы один бык котик появляться не будет. Сколько раз алгоритм сделает команду заменить, если в итоге должно получиться ровно два котика?
Примечание: входная строка должна состоять только из быков.
Алгоритм заменяет все строки BULL на LLLL. Также должно было появится два котика (из двух строк LLLLLL). Значит дожно было получится в промежуточном результате 12 символов L. Это возможно если изначально в строке было три BULL.
Произойдет три замены BU на LL и две замены LLLLLL на CAT. В итоге программа сделает 5 замен.
Решение программой
for i in range(1, 100): a = "BULL" * i ans = 0 flag = False # Чтобы найти самый первый while "LL" in a: if "BU" in a: # Если выполнится замена a = a.replace("BU", "LL", 1) ans += 1 if not ("BULL" in a): a = a.replace("LLLLLL", "CAT", 1) ans += 1 if a.count("L") == len(a) or ans > 1000: # Бесконечный цикл, если будут одни L break if a.count("CAT") == 2: print(ans) break
Ошибка.
Попробуйте повторить позже
Исполнитель Редактор получает на вход строку цифр и преобразовывает её, Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки цифр.
А) заменить (v, w).
Эта команда заменяет в строке первое слева вхождение цепочки v на цепочку w.
Например, выполнение команды заменить(111, 27) преобразует строку 05111150 в строку 0527150.
Если в строке нет вхождений цепочки v, то выполнение команды заменить (v, w) не меняет эту строку.
Б) нашлось (w).
Эта команда проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина» в противном случае возвращает значение «ложь». Строка исполнителя при этом не изменяется.
Цикл
ПОКА *условие*
*последовательность команд*
КОНЕЦ ПОКА
выполняется, пока условие истинно.
В конструкции
ЕСЛИ *условие*
ТО *команда 1*
ИНАЧЕ *команда 2*
КОНЕЦ ЕСЛИ
выполняется команда 1 (если условие истинно) или команда 2 (если условие ложно).
Дана программа для Редактора:
НАЧАЛО
ПОКА нашлось (>0) ИЛИ нашлось (>1) ИЛИ нашлось (>2)
ЕСЛИ нашлось (>0)
ТО заменить (>0, 22>)
КОНЕЦ ЕСЛИ
ЕСЛИ нашлось (>1)
ТО заменить (>1, 2>)
КОНЕЦ ЕСЛИ
ЕСЛИ нашлось (>2)
ТО заменить (>2, 1>)
КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
КОНЕЦ
На вход приведённой выше програмы поступает строка, начинающаяся с символа «>», а затем содержащая 15 цифр 0, n цифр 1 и 15 цифр 2, расположенных в произвольном порядке. Определите наименьшее значение n, при котором сумма числовых значений цифр строки, получившейся в результате выполнения программы, является простым числом.
Решение 1
Рассмотрим переходы цифр:
Получаем, что каждый ноль это в сумму, каждая единица , каждая двойка . Посчитаем пока что, какая будет сумма после обработки двоек и нулей. , ближайшее простое число это , нам не хватает до такой суммы. Каждая единица это , значит, чтобы получить нам нужно две единицы.
Решение 2
def is_prime(n): for i in range(2, int(n ** 0.5) + 1): if n % i == 0: return False return n > 1 for n in range(0, 100): s = ’>’ + ’0’ * 15 + ’1’ * n + ’2’ * 15 while ’>0’ in s or ’>1’ in s or ’>2’ in s: if ’>0’ in s: s = s.replace(’>0’, ’22>’) if ’>1’ in s: s = s.replace(’>1’, ’2>’) if ’>2’ in s: s = s.replace(’>2’, ’1>’) summa = 0 for i in s[0:-1]: summa += int(i) if is_prime(summa): print(n) break
Ошибка.
Попробуйте повторить позже
Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки символов.
1. заменить (v, w)
2. нашлось (v)
Первая команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Если цепочки v в строке нет, эта команда не изменяет строку. Вторая команда проверяет, встречается ли цепочка v в строке исполнителя Редактор.
Дана программа для исполнителя Редактор:
НАЧАЛО
ПОКА НЕ нашлось (00)
заменить (02, 101)
заменить (11, 2)
заменить (012, 30)
заменить (010, 00)
КОНЕЦ ПОКА
КОНЕЦ
Известно, что исходная строка содержала ровно два нуля – на первом и на последнем месте, 50 двоек, больше 100 единиц и не содержала других цифр. После выполнения программы получилась строка, сумма цифр которой оказалась простым числом. Какое наименьшее количество единиц могло быть в исходной строке?
Решение 1
Распишем все переходы для пар из единиц и двоек.
Задача у нас про сумму цифр, как видим сумма при переходе пар константна.
Рассмотрим переходы одиночных цифр между нулями.
Как видим, сумма оба раза уменьшилась на единицу. Получается, что если изначальная сумма была , то сумма после работы алгоритма будет , однако если не допустить этих оперпций, то сумма не изменится и так потребуется меньшее количество единиц. Это можно сделать поставив после нуля 25 двоек, затем все единицы, и снова 25 двоек. Начальная сумма цифр . Нам необходимо количество единиц . Минимальное простое число большее — это , получаем — количество единиц.
Решение 2
def is_prime(n): for i in range(2, int(n ** 0.5) + 1): if n % i == 0: return False return n > 1 for n in range(101, 1000): s = "0" + ’2’ * 25 + ’1’ * n + ’2’ * 25 + ’0’ while not (’00’ in s): s = s.replace(’02’, ’101’, 1)\ .replace(’11’, ’2’, 1)\ .replace(’012’, ’30’, 1)\ .replace(’010’, ’00’, 1) if is_prime(sum(int(x) for x in s)): print(n) break
Ошибка.
Попробуйте повторить позже
Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки символов.
1. заменить (v, w)
2. нашлось (v)
Первая команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Если цепочки v в строке нет, эта команда не изменяет строку. Вторая команда проверяет, встречается ли цепочка v в строке исполнителя Редактор. Дана программа для исполнителя Редактор:
НАЧАЛО
ПОКА нашлось (111)
заменить (111, 22)
заменить (222, 11)
КОНЕЦ ПОКА
КОНЕЦ
Известно, что исходная строка содержала более 50 единиц и не содержала других цифр. Укажите минимально возможную длину исходной строки, при которой в результате работы этой программы получится строка, содержащая минимально возможное количество единиц.
mndl = 10000 mn = 10000 for i in range(51, 1000): s = ’1’*i while ’111’ in s: s = s.replace(’111’, ’22’, 1) s = s.replace(’222’, ’11’, 1) if s.count(’1’) < mndl: mndl = s.count(’1’) mn = i print(mn)
Ошибка.
Попробуйте повторить позже
Исполнитель Редактор получает на вход строку цифр и преобразовывает её. На выполнение Редактору дана следующая программа:
ПОКА нашлось(55555) ИЛИ нашлось(33333)
ЕСЛИ нашлось(55555)
ТО заменить(55555, 333)
ИНАЧЕ заменить(33333,555)
КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
На вход программе подана строка из 1024 подряд идущих символов 5. Сколько замен произойдет в ходе работы алгоритма?
s=’5’*1024 k=0 while ’55555’ in s or ’33333’ in s: if ’55555’ in s: s=s.replace(’55555’, ’333’, 1) k+=1 else: s=s.replace(’33333’, ’555’, 1) k+=1 print(k)
Ошибка.
Попробуйте повторить позже
Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в которых и обозначают последовательности цифр:
А) заменить ().
Эта команда заменяет в строке первое слева вхождение последовательности на последовательность . Например, выполнение команды заменить преобразует строку в строку .
Если в строке нет вхождений последовательности , то выполнение команды заменить не меняет эту строку.
Б) Нашлось ().
Эта команда проверяет, встречается ли последовательность в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь». Строка исполнителя при этом не изменяется.
Цикл
ПОКА условие
Последовательность команд
КОНЕЦ ПОКА
Выполняется, пока условие истинно.
В конструкции:
ЕСЛИ условие
команда1
ИНАЧЕ
команда2
КОНЕЦ ЕСЛИ
Выполняется команда1 (если условие истинно) или команда2 (если условие ложно).
Дана программа для редактора:
НАЧАЛО
ПОКА нашлось (1111) ИЛИ нашлось (444)
ЕСЛИ нашлось (1111)
ТО заменить (1111,41)
ИНАЧЕ заменить (444, 1)
КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
КОНЕЦ
Известно, что исходная строка состояла из n цифр «1», при этом не содержав других цифр. Укажите минимальное значение n, при котором сумма цифр в строке будет равна количеству замен.
for n in range(1,1500): c = 0 s = n*’1’ while ’1111’ in s or ’444’ in s: if (’1111’) in s: s = s.replace(’1111’,’41’,1) c += 1 else: s = s.replace(’444’,’1’,1) c += 1 if c == sum(map(int,s)): print(n) break