Задание 13 ЕГЭ по информатике 2027 — исполнитель, условная команда и количество программ
Разбор задания 13 ЕГЭ по информатике 2027: исполнитель с командами «прибавь 1» и «поменяй местами», условие применимости команды, динамическое программирование и ответ 16 из демоверсии. Код на Python.
В 2027 году задание 13 ЕГЭ по информатике — это исполнитель, который преобразует число на экране, и вопрос «сколько существует программ», переводящих одно число в другое. В демоверсии у исполнителя две команды, причём вторая применима не всегда, и программ из 100 в 141 ровно 16. До 2027 года та же тема шла под номером 23; теперь 23 — это графы из файла, а под 13 переехал исполнитель. Ниже — условие демо, идея динамического программирования вперёд, разбор до ответа, код и вариации с обязательной и запрещённой точкой.
В демоверсии 2026 (тогда задание 23) у исполнителя были команды «вычесть 1», «вычесть 4» и «целая часть от деления на 3», а траектория должна была содержать одно число и не содержать другое. Разбор этой темы с командами без условий применимости — в статье о задании 23 2026 года. Шаблон оттуда работает и сейчас, но условную команду в него нужно добавить руками; как именно — ниже.
Условие демоверсии 2027
Исполнитель преобразует число на экране. У исполнителя есть две команды, обозначенные латинскими буквами:
- A. Прибавь 1.
- B. Поменяй местами.
Первая команда увеличивает число на 1. Вторая применяется только к числу, у которого цифра в разряде десятков меньше цифры в разряде единиц, и заменяет число на экране числом, в котором цифры двух младших разрядов поменялись местами. Программа — последовательность команд. Сколько существует программ, для которых при исходном числе 100 результатом является число 141?
Траектория вычислений программы — последовательность результатов выполнения всех команд. Например, для программы ABA при исходном числе 13 траектория состоит из чисел 14, 41, 42.
Ответ ФИПИ: 16.
Как работает команда B
Команда B смотрит на две младшие цифры. У числа 13 цифра десятков 1 меньше цифры единиц 3 — команда применима и даёт 31. У числа 41 десятки 4 больше единиц 1 — команда неприменима, и в этот момент доступна только A. У числа 100 десятки и единицы равны нулю, условие «меньше» не выполнено — тоже только A.
| Число | Десятки | Единицы | B применима? | Результат B |
|---|---|---|---|---|
| 13 | 1 | 3 | да | 31 |
| 41 | 4 | 1 | нет | — |
| 100 | 0 | 0 | нет | — |
| 101 | 0 | 1 | да | 110 |
| 112 | 1 | 2 | да | 121 |
| 120 | 2 | 0 | нет | — |
Обрати внимание: команда B всегда увеличивает число, когда применима (большая цифра уходит в десятки). Вместе с A это значит, что все переходы идут от меньшего числа к большему — и можно считать программы по возрастанию.
Идея: динамика вперёд
Обозначим dp[x] — число программ, переводящих 100 в x. Старт: dp[100] = 1, пустая программа. Дальше идём по числам от 100 к 141 по возрастанию. Для каждого x, у которого dp[x] уже посчитан, применяем все доступные команды и каждому результату y прибавляем dp[x]: сколькими способами пришли в x, столькими же продолжим в y этой командой.
В задании 23 прошлых лет обычно считали «по предшественникам»: в число n приходят из n − 1 командой «прибавь 1» и из n / 2 командой «умножь на 2». С командой B так неудобно: чтобы найти, из каких чисел можно прийти в 121, нужно перебирать, у кого после перестановки младших цифр получится 121. Раздача счётчиков вперёд обходит эту проблему: условие проверяется на исходном числе, как оно и сформулировано.
Разбор демо по вехам
От 100 до 109 команда B либо неприменима (100), либо уводит выше 109: из 101 она даёт 110, из 102 — 120, из 103 — 130 и так далее. Поэтому dp от 100 до 109 равно 1 — только цепочка из команд A.
| Число | Откуда приходят | dp |
|---|---|---|
| 100–109 | только A по цепочке | 1 |
| 110 | 109 командой A (1) + 101 командой B (1) | 2 |
| 111–119 | только A от 110 | 2 |
| 120 | 119 командой A (2) + 102 командой B (1) | 3 |
| 121 | 120 командой A (3) + 112 командой B (2) | 5 |
| 122–129 | только A от 121 | 5 |
| 130 | 129 командой A (5) + 103 командой B (1) | 6 |
| 131 | 130 командой A (6) + 113 командой B (2) | 8 |
| 132 | 131 командой A (8) + 123 командой B (5) | 13 |
| 133–139 | только A от 132 | 13 |
| 140 | 139 командой A (13) + 104 командой B (1) | 14 |
| 141 | 140 командой A (14) + 114 командой B (2) | 16 |
В число 141 приходят из 140 командой A и из 114 командой B (у 114 десятки 1 меньше единиц 4, перестановка даёт 141). Счётчики складываются: 14 + 2 = 16. Это и есть ответ.
Решение на Python
def moves(x):
result = [x + 1] # команда A
tens = x // 10 % 10
units = x % 10
if tens < units: # условие команды B
result.append(x - tens * 10 - units + units * 10 + tens)
return result
def count(a, b):
dp = {a: 1}
for x in range(a, b):
if x in dp:
for y in moves(x):
if y <= b:
dp[y] = dp.get(y, 0) + dp[x]
return dp.get(b, 0)
print(count(100, 141)) # 16
Функция moves возвращает список результатов всех применимых команд; условие команды B живёт в ней, и больше нигде его проверять не нужно. Проверка y <= b не даёт счётчикам уйти за цель. Словарь вместо списка удобен тем, что числа могут перескакивать: из 103 команда B ведёт сразу в 130.
Проверить ответ можно перебором в лоб:
def brute(x, b):
if x == b:
return 1
if x > b:
return 0
return sum(brute(y, b) for y in moves(x))
print(brute(100, 141)) # 16
На демо-масштабе он работает мгновенно и обязан совпасть с динамикой. На расстояниях в сотни шагов перебор уже не успевает, а динамика считает за доли секунды.
Вариации вопроса
| Формулировка | Что делать |
|---|---|
| Траектория проходит через M | count(a, m) * count(m, b) |
| Траектория не проходит через M | count(a, b) - count(a, m) * count(m, b) или исключить M из переходов |
| Проходит через M и не проходит через K | исключить K в обоих отрезках: до M и после |
| Команда с умножением («умножь на 3») | добавить x * 3 в moves |
| Команда уменьшает число | цикл от большего к меньшему или рекурсия с кешем |
Обязательное число делит программу на две независимые части, и их количества перемножаются — комбинаторное правило произведения. Запрещённое число проще всего исключить прямо при раздаче счётчиков: если y запрещено, не прибавлять. Оба приёма подробно, с ручными таблицами, разобраны в статье 2026 года и в обзоре динамического программирования на ЕГЭ.
Типичные ошибки
Условие применимости не проверено
Самая частая ошибка формы 2027: команда B применяется ко всем числам подряд. Тогда из 100 получится 100 (перестановка нулей), из 120 — 102, и счётчики разъедутся. Условие «десятки меньше единиц» — часть команды, а не комментарий.
Старт без единицы
dp[a] = 1 — пустая программа. С нулём все дальнейшие счётчики останутся нулями.
Числа больше цели
Без проверки y <= b в словаре появятся числа за целью. На ответ они не влияют, но при обязательной точке и в перебор в лоб приводят к лишней работе и путанице.
Перестановка посчитана неверно
«Поменять местами две младшие цифры» — это x - tens*10 - units + units*10 + tens. Проверь функцию на примере из условия: moves(13) должно содержать 31, а moves(41) — только 42.
Старая нумерация
В сборниках 2025–2026 годов эта тема лежит под номером 23, а под 13 — маска подсети. Ищи задачи по теме, а не по номеру; маска теперь — задание 10.
Подборка ошибок по всем номерам — в статье Типичные ошибки на ЕГЭ по информатике.
Тайминг на экзамене
| Этап | Время |
|---|---|
Перенести команды в moves, включая условие | 2 мин |
Проверить moves на примере из условия | 1 мин |
Запустить count, сверить с перебором | 1 мин |
| Итого | 4–5 мин |
Спецификация отводит семь минут. Проверка moves на примере из условия — обязательный шаг: именно там прячется ошибка в условии применимости.
Как тренироваться
- Реши десять заданий 23 из сборников прошлых лет шаблоном
moves+count— без условных команд, чтобы закрепить схему. - Потом пять заданий с условной командой — «поменяй местами», «прибавь сумму цифр», «удвой, если чётное». Каждый раз проверяй
movesна примере. - Один раз сравни динамику с перебором в лоб на расстоянии в 40–50 шагов, чтобы увидеть, где перебор перестаёт успевать.
- Отработай обязательную и запрещённую точки — они дают половину вариаций.
Как изменились остальные номера — в обзоре ЕГЭ по информатике 2027: что изменилось; демозадание в контексте варианта — в разборе демоверсии 2027. Новое задание 23 про графы из файла использует ту же рекурсию с кешем — разбор здесь. Словари и генераторы, на которых держится код, — в подборке Python-идиом.
Короткий итог
Задание 13 в 2027 году — исполнитель и количество программ, бывший номер 23. В демо 2027 одна из команд применима не всегда, и из-за неё удобнее считать динамику вперёд: dp[y] += dp[x] для каждой применимой команды. На демоверсии ответ 16, и перебор в лоб его подтверждает. Обязательные и запрещённые точки решаются как раньше: произведение и исключение.
Задания 13 в форме 2027 года с автопроверкой есть в TuteMe — с условными командами и вариациями про траекторию.