Задание 12 ЕГЭ по информатике: решайте с автопроверкой

В задании 12 исполнитель Редактор меняет строку командами «заменить(v, w)» и «нашлось(v)» внутри цикла «ПОКА». Нужно узнать, какая строка получится в конце, или подобрать исходную строку под условие.

Решать задачи номера

Как решать программой

Программа повторяет алгоритм Редактора почти дословно. «нашлось(v)» в Python — это v in s, а «заменить(v, w)» — это s = s.replace(v, w, 1): третий аргумент 1 заменяет только первое вхождение, как в задании.

Ветки «ЕСЛИ … ИНАЧЕ ЕСЛИ» переносятся в if и elif. Порядок веток важен: выполняется первая подходящая.

Если нужно подобрать исходную строку, например наименьшее число пятёрок, при котором результат имеет нужный вид, оберните моделирование в цикл по вариантам исходной строки. Перед перебором проверьте моделирование на примере из условия.

Строку из условия вида «сто единиц и пятьдесят двоек» соберите умножением строк, а не вручную: так не ошибётесь в количестве символов.

Разбор примера

Пока в строке есть 12, 13 или 23, Редактор делает одну замену по порядку веток: 12 на 2, иначе 13 на 31, иначе 23 на 3. Какой станет строка 1213?

s = '1213'
while '12' in s or '13' in s or '23' in s:
    if '12' in s:
        s = s.replace('12', '2', 1)
    elif '13' in s:
        s = s.replace('13', '31', 1)
    else:
        s = s.replace('23', '3', 1)
print(s)

Программа печатает

31

Строка меняется так: 1213, затем 213 (первая замена 12 на 2), затем 231 (замена 13 на 31), затем 31 (замена 23 на 3). В строке 31 нет ни 12, ни 13, ни 23, и цикл останавливается.

Решить эту задачу

Задачи к заданию 12

  • Редактор: итоговая строкаСредняяРешать
  • Редактор: тройки и единицыСредняяРешать
  • Редактор со стрелкойСредняяРешать
  • Редактор: наименьшее число пятёрокСредняяРешать
  • Машина Тьюринга на троичной лентеСредняяРешать
  • Редактор: бегущий нольСредняяРешать
  • Редактор: семёрки и тройкиСредняяРешать
  • Редактор на буквах A, B, CСредняяРешать

Бесплатно и без регистрации: пишете код в браузере и проверяете его тестами (без аккаунта — несколько задач в день).

Вопросы и ответы

Почему replace без третьего аргумента даёт другой ответ?
Без него Python заменяет все вхождения сразу, а Редактор заменяет только первое слева.
Может ли программа зациклиться?
Может, если замена не укорачивает строку и не двигает символы к концу. В задачах экзамена алгоритм всегда завершается, но при ошибке в программе цикл станет бесконечным.
Как строить исходную строку из пятёрок и двоек?
Умножением строк: "5" * k + "2" * m. Перебирайте k и m во вложенных циклах.