Пробный урок
📘 ЕГЭ по информатике 2027 · задание 12 из 27

Задание 12 ЕГЭ по информатике: Исполнение алгоритма для конкретного исполнителя с фиксированным набором команд

Что проверяет задание 12, сколько баллов оно приносит и сколько времени на него закладывать — и 3 примера в формате ФИПИ с подробным решением и ответом.

Уровень
повышенный
Максимум
1 балл
Время
~6 минут
Компьютер
не нужен

Примеры задания 12 с решениями

Сначала попробуйте решить сами, затем откройте решение и сверьте ответ

Пример 1

Исполнитель Редактор получает на вход строку цифр и преобразует её. Команды: заменить(v, w) — заменяет в строке первое слева вхождение цепочки v на цепочку w; нашлось(v) — проверяет, встречается ли цепочка v в строке. Дана программа:
ПОКА нашлось(222) ИЛИ нашлось(888)
  ЕСЛИ нашлось(222)
    ТО заменить(222, 8)
    ИНАЧЕ заменить(888, 2)
  КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
Какая строка получится в результате применения программы к строке, состоящей из 70 идущих подряд цифр 8?
Показать решение и ответ
1. Следим за строкой: пока нет 222, заменяется 888 → 2. 70 восьмёрок → 2 + 67 восьмёрок → 22 + 64 → 222 + 61 → теперь есть 222, оно меняется на 8 → 62 восьмёрки. 2. Получился цикл: из 70 восьмёрок стало 62 — каждый раз минус 8. 3. 70 → 62 → 54 → 46 → 38 → 30 → 22 → 14 → 6. 4. Из 6 восьмёрок: 888 → 2, остаётся 2 + 888 → 22. Ни 222, ни 888 нет — программа остановилась. Проверка программой:
s = '8' * 70                              # исходная строка: 70 восьмёрок
while '222' in s or '888' in s:           # ПОКА нашлось(222) ИЛИ нашлось(888)
    if '222' in s:                        # ЕСЛИ нашлось(222)
        s = s.replace('222', '8', 1)      # заменить(222, 8) — только первое вхождение
    else:                                 # ИНАЧЕ
        s = s.replace('888', '2', 1)      # заменить(888, 2)
print(s)                                  # 22

Ответ: 22

Пример 2

Исполнитель Редактор получает на вход строку цифр и преобразует её. Команды: заменить(v, w) — заменяет первое слева вхождение v на w; нашлось(v) — проверяет, встречается ли v в строке. Дана программа:
ПОКА нашлось(15) ИЛИ нашлось(55)
  ЕСЛИ нашлось(15)
    ТО заменить(15, 5)
    ИНАЧЕ заменить(55, 1)
  КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
На вход подана строка из цифры 1, за которой идут 80 цифр 5. Какая строка получится в результате?
Показать решение и ответ
1. Первый шаг: есть 15 → заменяем на 5. Получаем 80 пятёрок. 2. 15 нет, есть 55 → заменяем на 1: строка 1 + 78 пятёрок. 3. Снова 15 → 5: 78 пятёрок. За два шага пятёрок становится на 2 меньше. 4. 80 → 78 → … → 2 пятёрки. Из 55 получается 1; ни 15, ни 55 больше нет. 5. Результат — строка «1». Проверка программой:
s = '1' + '5' * 80                       # исходная строка
while '15' in s or '55' in s:            # ПОКА нашлось(15) ИЛИ нашлось(55)
    if '15' in s:                        # ЕСЛИ нашлось(15)
        s = s.replace('15', '5', 1)      # заменить(15, 5)
    else:                                # ИНАЧЕ
        s = s.replace('55', '1', 1)      # заменить(55, 1)
print(s)                                 # 1

Ответ: 1

Пример 3

Исполнитель Редактор получает на вход строку и преобразует её. Команды: заменить(v, w) — заменяет первое слева вхождение v на w; нашлось(v) — проверяет, встречается ли v в строке. Дана программа:
ПОКА нашлось(>1) ИЛИ нашлось(>2) ИЛИ нашлось(>3)
  ЕСЛИ нашлось(>1) ТО заменить(>1, 22>) КОНЕЦ ЕСЛИ
  ЕСЛИ нашлось(>2) ТО заменить(>2, 2>) КОНЕЦ ЕСЛИ
  ЕСЛИ нашлось(>3) ТО заменить(>3, 1>) КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
На вход подана строка, начинающаяся с символа «>», за которым идут 30 цифр 1, затем 30 цифр 2 и 30 цифр 3. Какова сумма цифр строки, получившейся в результате?
Показать решение и ответ
1. Символ «>» идёт по строке слева направо и заменяет каждую цифру, мимо которой проходит. 2. Каждая 1 превращается в 22 (сумма 4), каждая 2 остаётся 2, каждая 3 превращается в 1. 3. Сумма: 30 · 4 + 30 · 2 + 30 · 1 = 120 + 60 + 30 = 210. Проверка программой:
s = '>' + '1' * 30 + '2' * 30 + '3' * 30         # исходная строка
while '>1' in s or '>2' in s or '>3' in s:       # ПОКА нашлось одно из трёх
    if '>1' in s:                                # ЕСЛИ нашлось(>1)
        s = s.replace('>1', '22>', 1)            # заменить(>1, 22>)
    if '>2' in s:                                # ЕСЛИ нашлось(>2)
        s = s.replace('>2', '2>', 1)             # заменить(>2, 2>)
    if '>3' in s:                                # ЕСЛИ нашлось(>3)
        s = s.replace('>3', '1>', 1)             # заменить(>3, 1>)
print(sum(int(c) for c in s if c.isdigit()))     # сумма цифр, символ > пропускаем: 210

Ответ: 210

Не получается задание 12? Разберём на пробном уроке

Бесплатно покажем, как решать задание 12 и похожие, определим пробелы и составим план подготовки к ЕГЭ.

Записаться бесплатно

Все задания ЕГЭ по информатике

Структура экзамена, баллы и темы — на странице программы ЕГЭ по информатике