Задание 12 ЕГЭ по информатике: исполнитель Редактор
Задание 12 ЕГЭ по информатике (КЕГЭ) — это исполнитель с фиксированным набором команд: чаще всего перед вами строковый редактор с двумя командами — заменить(v, w) и нашлось(v) — и программа с циклом ПОКА, которая гоняет их по входной строке. По кодификатору это проверяемый элемент содержания 3.3, задание повышенного уровня сложности, за него дают 1 первичный балл, файла к нему не прилагается, и специализированное программное обеспечение не требуется. Ответ — число: либо результирующая строка, записанная цепочкой цифр, либо количество нужных цифр в ней, либо параметр входа, при котором выполняется заданное условие. В статье — точная семантика команд, три рабочих приёма (инвариант, прогон на коротких строках, эмулятор на Python) и три разбора реальных заданий из открытого банка ФИПИ с проверенными ответами. Потренироваться можно на реальных заданиях 12 ЕГЭ по информатике онлайн — с мгновенной проверкой ответа.
Что проверяет задание 12 ЕГЭ по информатике
Раздел кодификатора — «Алгоритмы и программирование», проверяемый элемент содержания 3.3 («Умение исполнить алгоритм для формального исполнителя с заданной системой команд»). В отличие от задания 5 (тот же КЭС, но базовый уровень и короткий алгоритм), здесь программу нельзя пройти вручную посимвольно за разумное время: строка обычно состоит из десятков или тысяч символов, а цикл повторяется до тех пор, пока в строке остаётся хотя бы одна из искомых цепочек.
Проверяемые умения (КЭС 3.3):
- понимать фиксированный набор команд формального исполнителя — обычно заменить(v, w) и нашлось(v) — и точно следовать их описанию, не додумывая поведение по аналогии с другими языками;
- формально исполнять конструкции ПОКА … КОНЕЦ ПОКА и ЕСЛИ … ТО … ИНАЧЕ … КОНЕЦ ЕСЛИ, включая составные условия с ИЛИ;
- отслеживать состояние строки после каждой отдельной команды, а не после всего тела цикла целиком;
- находить закономерность в поведении программы на длинных или параметризованных входных данных, не выполняя её вручную символ за символом;
- при необходимости точно смоделировать работу исполнителя программой (Python — язык, доступный на экзамене в списке сред программирования).
| Параметр | Значение |
|---|---|
| Максимальный балл | 1 первичный (частичного зачёта нет: ответ либо полностью совпал с эталоном, либо 0) |
| Уровень сложности | Повышенный (П) — одно из 11 заданий этого уровня в работе |
| Формат ответа | Краткий: число (результирующая строка из цифр, количество цифр или искомый параметр — без пробелов и разделителей) |
| Раздел кодификатора | 3. Алгоритмы и программирование; КЭС 3.3; код требования 1.4 |
| Нужен ли файл / спец. ПО | Нет — условие даёт программу целиком, входная строка описана словами («N идущих подряд цифр…») |
| Примерное время выполнения | 6 минут (Обобщённый план варианта КИМ, СПЕЦ ЕГЭ-2026 по информатике) |
| Связанные задания | Задание 5 (тот же КЭС 3.3, базовый уровень, короткий алгоритм), задание 6 (КЭС 3.3, управление исполнителем, базовый уровень), задание 23 (КЭС 3.3, анализ хода исполнения алгоритма, тоже повышенный уровень) |
Тренируйтесь на реальных заданиях
Задания 12 ЕГЭ по информатике из открытого банка ФИПИ с мгновенной проверкой ответа. Решаем, ошибаемся, разбираем — бесплатно.
Как выглядит формулировка
Условие задания 12 почти всегда начинается с одного и того же определяющего блока — он не меняется от варианта к варианту и задаёт всю терминологию исполнителя:
«Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки цифр.
А) заменить (v, w). Эта команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Например, выполнение команды заменить (111, 27) преобразует строку 05111150 в строку 0527150. Если в строке нет вхождений цепочки v, то выполнение команды заменить (v, w) не меняет эту строку.
Б) нашлось (v). Эта команда проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь». Строка исполнителя при этом не изменяется.»
«Цикл ПОКА условие … последовательность команд … КОНЕЦ ПОКА выполняется, пока условие истинно. В конструкции ЕСЛИ условие ТО команда1 ИНАЧЕ команда2 КОНЕЦ ЕСЛИ выполняется команда1 (если условие истинно) или команда2 (если условие ложно).»
Дальше идёт сама программа и вопрос — он бывает трёх видов, и от вида вопроса зависит, что именно писать в ответ:
- «Какая строка получится в результате применения приведённой ниже программы к строке, состоящей из 82 идущих подряд цифр 8? В ответе запишите полученную строку.» — ответ пишется самой строкой, цепочкой цифр без пробелов;
- «Определите количество цифр 2 в строке, получившейся в результате применения приведённой ниже программы к входной строке… В ответе запишите только количество цифр 2 в получившейся строке.» — ответ пишется одним числом-счётчиком;
- «На вход программе поступает строка, начинающаяся с символа «>», а затем содержащая 39 цифр «0», n цифр «1» и 39 цифр «2», расположенных в произвольном порядке. Определите наименьшее значение n, при котором сумма числовых значений цифр строки, получившейся в результате выполнения программы, является простым числом.» — ответ пишется значением искомого параметра n, а не результатом работы программы.
Как записывается ответ. В любом из трёх случаев ответ — это число: либо цифры результирующей строки, идущие подряд без пробелов и других разделителей, либо само число-счётчик или число-параметр. Никаких кавычек вокруг строки, слова «строка» и единиц измерения быть не должно — только цифры. Если результирующая строка длинная (в примерах ниже встречаются строки на тысячи символов), в ответ идёт вся строка целиком, а не её начало или конец.
Теория: всё, что нужно для задания 12
Точная семантика команд
Вся ошибка в задании 12 обычно происходит не в арифметике, а в небрежном чтении определения команд. Зафиксируйте четыре факта — они не меняются от варианта к варианту.
- заменить(v, w) ищет в строке первое слева (то есть самое левое) вхождение цепочки и заменяет именно его на . Все остальные вхождения , если они есть правее, командой не затрагиваются — до них дойдёт очередь на следующих итерациях цикла.
- Если цепочки в строке нет, команда заменить строку не меняет — это не ошибка исполнителя и не повод остановить программу, просто пустое действие.
- нашлось(v) — это только проверка: строка содержит или нет. Команда никогда не меняет строку, даже если цепочка найдена. Спутать «нашлось» с «заменить» — частая причина сдвига на одну итерацию во всём разборе.
- Условие цикла ПОКА A ИЛИ B ИЛИ C проверяется заново перед каждой итерацией, на текущей, уже изменённой строке. Пока верно хотя бы одно из условий — тело цикла выполняется ещё раз.
Порядок команд внутри цикла — критичен
Тело цикла — это не «набор правил», а последовательность команд, которая выполняется строго сверху вниз. Различайте две конструкции, которые выглядят похоже, но работают по-разному.
Вариант А — взаимоисключающие ветки (ЕСЛИ … ИНАЧЕ)
ПОКА нашлось (1111) ИЛИ нашлось (8888)
ЕСЛИ нашлось (1111)
ТО заменить (1111, 8)
ИНАЧЕ заменить (8888, 11)
КОНЕЦ ЕСЛИ
КОНЕЦ ПОКАЗдесь за одну итерацию произойдёт ровно одна замена: либо по ветке ТО, либо по ветке ИНАЧЕ, никогда обе сразу.
Вариант Б — независимые команды подряд
ПОКА нашлось (2111) ИЛИ нашлось (1112)
заменить (111, 1)
ЕСЛИ нашлось (21)
ТО заменить (21, 12)
ИНАЧЕ заменить (12, 1)
КОНЕЦ ЕСЛИ
КОНЕЦ ПОКАЗдесь безусловная команда заменить (111, 1) выполняется в начале каждой итерации, а затем к уже изменённой строке применяется ещё одна замена по ЕСЛИ/ИНАЧЕ — то есть за одну итерацию может произойти две замены подряд. Если моделировать это как «одно из двух правил сработало», результат разойдётся с эталоном уже через несколько итераций.
Ещё сложнее — три подряд идущих независимых ЕСЛИ без ИНАЧЕ (без взаимного исключения): каждое условие проверяется по очереди, и если оно истинно, замена выполняется сразу, обновляя строку для следующей проверки внутри того же прохода тела цикла. За одну итерацию тогда возможны от нуля до трёх замен. Единственный способ не ошибиться — читать тело цикла как обычный код, строка за строкой, а не пытаться свернуть его в мысленную таблицу правил.
Главный приём: найти инвариант
Строку в 2000 символов моделировать посимвольно вручную нереально, а на экзамене нет компьютера с Python наготове для каждого черновика. Поэтому первым делом ищут инвариант — величину, которая после каждой замены меняется предсказуемо (или вовсе не меняется), не завися от того, где именно в строке произошла замена и в каком порядке сработали команды.
Три кандидата в инварианты, которые почти всегда стоит проверить первыми:
- длина строки — заменить(v, w) меняет длину ровно на , вне зависимости от места замены;
- сумма цифр строки — меняется на разницу между суммой цифр и суммой цифр ;
- количество конкретной цифры — удобно, если вопрос как раз про количество цифр в результате.
Самый сильный случай — когда в строке есть ровно один «служебный» символ (например, символ ">"), а все команды имеют вид «служебный символ и цифра рядом с ним меняются местами и переписываются» — тогда символ просто сдвигается вдоль строки, ровно один раз проходя мимо каждой обычной цифры и переписывая её по фиксированному правилу. В этом случае результат вообще не зависит от порядка цифр во входной строке — только от того, сколько каких цифр было: каждая цифра вносит в итоговую величину свой фиксированный вклад независимо от соседей.
где — во что превращается цифра , когда служебный символ проходит мимо неё. Если такую формулу удалось вывести, ответ на задание — это чистая арифметика без единой замены строки. Полный разбор такого случая — в примере 1 ниже.
Второй приём: прогон на коротких входах
Если явного инварианта не видно (замены вида «AAAA → BB» без единого «бегущего» символа обычно его не дают), работает второй приём: прогнать программу вручную или на бумаге на маленьких входах — строке из 4, 8, 12, 16 одинаковых символов — и найти периодическую закономерность.
Например, для правил и , применённых к строке из восьмёрок при :
8888 нашлось, 1111 нет → заменить (8888, 11):
получаем "11" и (n - 4) восьмёрок
снова 8888 нашлось (единиц пока только 2) → заменить (8888, 11):
получаем "1111" и (n - 8) восьмёрок
теперь нашлось (1111) → заменить (1111, 8):
получаем "8" и (n - 8) восьмёрокТри шага «съедают» ровно 8 восьмёрок и оставляют взамен одну восьмёрку — то есть каждые 8 входных восьмёрок в итоге стягиваются в одну. Как только вы поймали такой период, вместо моделирования всей строки считаете (или последовательно применяете найденное правило уменьшения), пока не останется меньше 8 символов — и на этом маленьком остатке уже спокойно домоделируете вручную.
Общий рецепт: постройте таблицу «вход → результат» для нескольких маленьких одного типа, поищите период или прямую формулу, а затем сведите большое из условия к уже посчитанному маленькому случаю через этот период.
Третий приём, самый надёжный: эмулятор на Python
Если инвариант не находится, а перебор коротких случаев занимает много времени или требует поиска минимального по сложному условию (например, «сумма цифр — простое число»), надёжнее всего написать программу, которая буквально повторяет описание исполнителя, и запустить её. На КЕГЭ Python доступен как одна из сред программирования, а сама идея эмуляции — универсальный приём, которым можно перепроверить и инвариант, и результат прогона на коротких строках.
Команды переносятся на Python практически дословно:
def nashlos(s, v):
return v in s
def zamenit(s, v, w):
return s.replace(v, w, 1)Главная ловушка эмуляции. Метод без третьего аргумента заменяет в Python все вхождения цепочки сразу, а команда заменить(v, w) исполнителя — только первое слева. Забыли третий аргумент — и эмулятор будет выдавать другой результат, начиная с той строки, где искомая цепочка встречается больше одного раза. Всегда пишите .
Дальше цикл ПОКА и конструкция ЕСЛИ/ИНАЧЕ переносятся тоже дословно, команда за командой, в том порядке, в каком они записаны в условии:
s = "8" * 82
while nashlos(s, "1111") or nashlos(s, "8888"):
if nashlos(s, "1111"):
s = zamenit(s, "1111", "8")
else:
s = zamenit(s, "8888", "11")
print(s)
print(len(s))Для вопросов вида «найдите наименьшее , при котором…» эмулятор оборачивается в перебор по : строите строку для каждого пробного , прогоняете исполнителя и проверяете условие, останавливаясь на первом подходящем значении. Полный рабочий код для такой задачи — в примере 3 ниже.
Алгоритм решения задания 12
- Определите вид вопроса. Нужна вся результирующая строка, количество определённой цифры в ней или значение параметра входа (обычно ), при котором выполняется дополнительное условие — от этого зависит, что именно вы будете подставлять в ответ.
- Выпишите тело цикла отдельно, сохраняя точный порядок команд сверху вниз. Отметьте: это взаимоисключающие ветки ЕСЛИ/ИНАЧЕ или независимые команды подряд, где за одну итерацию может произойти несколько замен.
- Прогоните программу вручную на коротком входе — строке из 4–10 символов того же вида, что в условии — и выпишите 3–4 первые итерации целиком, посимвольно.
- Проверьте инвариант. Как каждая замена меняет длину строки, сумму цифр или количество нужной цифры? Если один «служебный» символ движется вдоль строки, перепишите каждую цифру по фиксированному правилу — и посчитайте итог напрямую, без моделирования всей строки.
- Если прямой формулы нет, прогоните программу на нескольких коротких входах одного семейства () и найдите период или закономерность, сводящую большое к уже посчитанному маленькому случаю.
- Для полной надёжности напишите эмулятор на Python с командой заменить(v, w) как , запустите его на реальных числах из условия и сверьте с результатом, полученным вручную.
- Запишите ответ числом — без пробелов, кавычек и слова «строка»: либо саму результирующую строку цифр, либо счётчик, либо найденный параметр.
Доведите приёмы до автоматизма
Прорешайте 15–20 программ подряд — и находить инвариант или писать эмулятор станет быстрым рефлексом. Задания ЕГЭ по информатике из банка ФИПИ с проверкой ответа — на Repet.ai.
Примеры с разбором
Пример 1. Инвариант: «бегущий» символ переписывает цифры
Условие (реальное задание из открытого банка ФИПИ):
Дана программа для Редактора:
НАЧАЛО
ПОКА нашлось (>1) ИЛИ нашлось (>2) ИЛИ нашлось (>0)
ЕСЛИ нашлось (>1)
ТО заменить (>1, 22>)
КОНЕЦ ЕСЛИ
ЕСЛИ нашлось (>2)
ТО заменить (>2, 2>)
КОНЕЦ ЕСЛИ
ЕСЛИ нашлось (>0)
ТО заменить (>0, 1>)
КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
КОНЕЦНа вход приведённой выше программе поступает строка, начинающаяся с символа ">", а затем содержащая 39 цифр «0», n цифр «1» и 39 цифр «2», расположенных в произвольном порядке. Определите наименьшее значение n, при котором сумма числовых значений цифр строки, получившейся в результате выполнения программы, является простым числом.
Решение:
Шаг 1. В строке ровно один символ ">". Все три замены имеют вид «">" и цифра справа» → «переписанная цифра (одна или две) и ">"» — то есть символ ">" двигается слева направо, по пути переписывая ровно один раз каждую цифру, мимо которой проходит. Три независимых ЕСЛИ подряд — не проблема: в строке в любой момент истинно только одно из условий (перед ">" стоит либо 0, либо 1, либо 2, либо ничего), поэтому реально срабатывает не больше одной замены за итерацию.
Шаг 2. Проверяем инвариант — во что превращается каждая цифра:
>0 → 1> цифра 0 становится 1, вклад в сумму: 1
>1 → 22> цифра 1 становится 22, вклад в сумму: 2 + 2 = 4
>2 → 2> цифра 2 остаётся 2 (символ просто идёт дальше), вклад: 2Поскольку каждая цифра обрабатывается независимо от соседей и порядка, итоговая сумма зависит только от количества цифр каждого вида, а не от их расположения — это и есть инвариант, который отменяет моделирование всей строки:
Шаг 3. Перебираем и проверяем простоту :
n = 0: 117 = 9 · 13 — составное
n = 1: 121 = 11 · 11 — составное
n = 2: 125 = 5 · 25 — составное
n = 3: 129 = 3 · 43 — составное
n = 4: 133 = 7 · 19 — составное
n = 5: 137 — простоеОтвет: 5.
Проверка эмулятором на Python (код — в приёме «Третий приём» выше, с тремя ЕСЛИ вместо ЕСЛИ/ИНАЧЕ) на строке из 39 нулей, 5 единиц и 39 двоек в любом порядке подтверждает: сумма цифр результата всегда равна 137, независимо от перестановки — ровно то, что предсказывает инвариант.
Пример 2. Прогон на коротких входах: период длиной 8
Условие (реальное задание из открытого банка ФИПИ):
Какая строка получится в результате применения приведённой ниже программы к строке, состоящей из 82 идущих подряд цифр 8? В ответе запишите полученную строку.
НАЧАЛО
ПОКА нашлось (1111) ИЛИ нашлось (8888)
ЕСЛИ нашлось (1111)
ТО заменить (1111, 8)
ИНАЧЕ заменить (8888, 11)
КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
КОНЕЦРешение:
Шаг 1. В строке из одних восьмёрок цепочки 1111 сначала нет, поэтому первая сработавшая замена — обязательно . Прямого инварианта тут не видно (ни длина, ни сумма цифр не меняются одинаково при двух разных заменах), поэтому прогоняем программу на коротком входе и ищем закономерность.
Шаг 2. Берём строку из восьмёрок и прослеживаем три шага подряд:
есть 8888, нет 1111 → заменить (8888, 11):
"11" + (n - 4) восьмёрок
снова есть 8888 (единиц только 2, это не 1111) → заменить (8888, 11):
"1111" + (n - 8) восьмёрок
теперь есть 1111 → заменить (1111, 8):
"8" + (n - 8) восьмёрокЗа три итерации восемь восьмёрок стянулись в одну — значит, пока в остатке 8 и больше восьмёрок, каждые следующие 8 символов входа сокращаются до 1 символа результата. У нас , то есть после таких циклов по три итерации от 80 исходных восьмёрок останется восьмёрок (по одной на каждую «десятку»), плюс нетронутыми — ещё 2 исходные восьмёрки, которые всё это время просто ждали своей очереди в конце строки.
Шаг 3. Проверяем эмулятором на Python — переносим программу дословно, включая порядок ЕСЛИ/ИНАЧЕ:
def nashlos(s, v):
return v in s
def zamenit(s, v, w):
return s.replace(v, w, 1)
s = "8" * 82
while nashlos(s, "1111") or nashlos(s, "8888"):
if nashlos(s, "1111"):
s = zamenit(s, "1111", "8")
else:
s = zamenit(s, "8888", "11")
print(s)Запуск даёт строку «118» длиной 3 символа.
Ответ: 118.
Проверка здравым смыслом: результат не может содержать 1111 и не может содержать 8888 (иначе цикл продолжился бы) — строка «118» действительно не содержит ни той, ни другой цепочки, а значит остановка цикла на ней логична.
Пример 3. Когда нужен полноценный эмулятор: перебор по n
Условие (реальное задание из открытого банка ФИПИ):
Дана программа для Редактора:
НАЧАЛО
ПОКА нашлось (31) ИЛИ нашлось (411) ИЛИ нашлось (1111)
ЕСЛИ нашлось (31)
ТО заменить (31, 1)
КОНЕЦ ЕСЛИ
ЕСЛИ нашлось (411)
ТО заменить (411, 13)
КОНЕЦ ЕСЛИ
ЕСЛИ нашлось (1111)
ТО заменить (1111, 4)
КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
КОНЕЦНа вход приведённой выше программе поступает строка, начинающаяся с цифры «4», а затем содержащая n цифр «1» (3 < n < 10000). Определите наименьшее значение n, при котором сумма цифр в строке, получившейся в результате выполнения программы, равна 34.
Решение:
Шаг 1. Тело цикла — три независимых ЕСЛИ без ИНАЧЕ подряд, и все три условия входят в условие ПОКА через ИЛИ. За одну итерацию возможно от одной до трёх замен, причём каждая следующая ЕСЛИ проверяется уже на строке, изменённой предыдущей. Ни длина, ни сумма цифр не меняются по единому правилу на каждом шаге ( убирает длину на 1 и сумму на 3, убирает длину на 1 и сумму на 2, убирает длину на 3 и сумму на 0) — простого инварианта не просматривается, а диапазон велик для прогона на коротких строках вручную. Это тот случай, когда быстрее и надёжнее написать эмулятор и перебрать программой.
Полный рабочий код:
def nashlos(s, v):
return v in s
def zamenit(s, v, w):
return s.replace(v, w, 1)
def run(n):
s = "4" + "1" * n
while nashlos(s, "31") or nashlos(s, "411") or nashlos(s, "1111"):
if nashlos(s, "31"):
s = zamenit(s, "31", "1")
if nashlos(s, "411"):
s = zamenit(s, "411", "13")
if nashlos(s, "1111"):
s = zamenit(s, "1111", "4")
return s
for n in range(4, 10000):
result = run(n)
digit_sum = sum(int(c) for c in result)
if digit_sum == 34:
print(n, result, digit_sum)
breakЗапуск находит первое подходящее значение при , где результирующая строка — «1333413341341» с суммой цифр 34.
Ответ: 187.
Проверка здравым смыслом: условие требует наименьшее подходящее , а перебор в коде идёт по возрастанию с самого начала диапазона и останавливается на первом совпадении — значит, найденное значение гарантированно минимально, повторный перебор дальше не нужен.
Типичные ошибки и ловушки
Заменили в эмуляторе все вхождения, а не первое слева
Метод в Python без третьего аргумента меняет ВСЕ вхождения цепочки сразу. Команда заменить(v, w) исполнителя меняет только первое слева. Всегда пишите — иначе эмулятор разойдётся с эталоном на первой же строке, где нужная цепочка встречается больше одного раза.
Спутали независимые ЕСЛИ подряд с конструкцией ЕСЛИ/ИНАЧЕ
Если между блоками ЕСЛИ нет слова ИНАЧЕ — это отдельные команды, и за одну итерацию цикла может выполниться не одна, а несколько замен подряд, каждая — уже на изменённой предыдущей командой строке. Свернуть три независимых ЕСЛИ в мысленное «одно из трёх правил» — верный способ получить неверный ответ.
Приняли нашлось(v) за замену
Команда нашлось(v) — это только проверка наличия цепочки, она никогда не меняет строку. Если в разборе строка «поменялась» после проверки нашлось — где-то потеряна команда заменить или перепутан порядок действий.
Искали вхождение не с начала строки
Команда заменить(v, w) всегда берёт самое левое вхождение цепочки v, даже если где-то правее «удобнее» было бы заменить другое. При ручном моделировании сканируйте строку строго слева направо и останавливайтесь на первом совпадении.
Пытались угадать инвариант вместо того, чтобы его проверить
Не всякая программа обладает простым инвариантом (длина, сумма цифр, количество цифры). Если после двух-трёх итераций выбранная величина меняется по-разному в зависимости от того, какая ветка сработала, — инварианта в этом виде нет, и нужно переходить к прогону на коротких входах или к эмулятору, а не подгонять формулу под один пример.
Не проверили краевой случай маленького остатка
Периодические закономерности (например, «каждые 8 символов сжимаются в 1») работают только пока остатка хватает на полный период. Последние несколько символов, которые не набрали полный период, нужно домоделировать отдельно — их пропуск типичен при работе с большими .
Записали ответ не числом
Результирующая строка тоже пишется как число — цепочка цифр без пробелов, кавычек и слова «строка». Добавление любых символов, которых нет в самой строке, — гарантированное несовпадение с эталоном.
Как задание 12 связано с остальным экзаменом
Всего в КЕГЭ по информатике 27 заданий, все с кратким ответом, максимальный первичный балл за работу — 29, время — 235 минут. Заданий повышенного уровня, как и задание 12, — 11 из 27. Задание 12 занимает в этой структуре особое место:
- оно входит в раздел кодификатора «Алгоритмы и программирование» — это 9 заданий и 10 первичных баллов на всю работу (задания 5, 6, 12, 16, 17, 23, 24, 25, 26);
- делит проверяемый элемент содержания КЭС 3.3 с тремя другими заданиями — заданием 5 и заданием 6 (оба базового уровня, программы там короче и без параметра ), и заданием 23 (тоже повышенный уровень, но там уже числовой, а не строковый исполнитель, и вопрос идёт про ход выполнения, а не про конечный результат);
- приём «написать эмулятор на Python и запустить» — прямой предшественник заданий 24, 25 и 26, где программа сложнее (10–20 строк), а два из них — 24 и 26 — дополнительно работают с приложенным файлом, но идея та же: смоделировать исполнителя точно по описанию, а не пытаться угадать результат;
- а метод поиска инварианта, отработанный на задании 12, напрямую переносится на задание 16 (рекуррентные выражения) — там тоже выгоднее сначала понять закономерность, чем вычислять всё подряд.
План подготовки на 3 недели
Неделя 1 — семантика команд и ручное моделирование
День 1–2: выучите наизусть точные формулировки заменить(v, w) и нашлось(v) — что каждая делает и чего не делает. День 3–4: прогоняйте вручную на бумаге программы из 4–6 строк на коротких строках (6–10 символов), записывая состояние строки после каждой отдельной команды, а не после всего тела цикла. День 5–7: научитесь на глаз отличать конструкцию ЕСЛИ/ИНАЧЕ (одна замена за итерацию) от последовательности независимых ЕСЛИ (возможно несколько замен за итерацию) — берите задания вперемешку и сначала классифицируйте тело цикла, и только потом считайте.
Неделя 2 — инвариант и прогон на коротких входах
День 1–3: на каждой новой программе сначала проверяйте три кандидата в инварианты — длину строки, сумму цифр, количество конкретной цифры — и смотрите, меняются ли они по единому правилу независимо от того, какая замена сработала. День 4–5: если инварианта нет, тренируйтесь строить таблицу «вход → результат» для маленьких и находить период. День 6–7: решайте одну и ту же задачу двумя способами — предполагаемым инвариантом или найденным периодом, а затем эмулятором на Python — и сверяйте. Расхождение — сигнал, что найденная закономерность не работает для всех .
Неделя 3 — эмулятор, скорость, полный банк
День 1–3: напишите универсальный шаблон эмулятора (функции нашлось и заменить через ), под который легко подставлять новую программу и новый вход, и отработайте на нём поиск наименьшего/наибольшего перебором. День 4–5: решайте задания на время — не больше 6 минут на задание, включая перенос программы на бумагу или в эмулятор. День 6–7: пройдите оставшиеся задания КЭС 3.3 (5, 6, 23) вперемешку с заданием 12, чтобы закрепить семантику формального исполнителя как единый навык, и проверьте себя в тренажёре на заданиях из банка ФИПИ.
Проверьте себя на реальных заданиях
На Repet.ai собраны задания ЕГЭ по информатике из открытого банка ФИПИ. Решайте онлайн, проверяйте ответ мгновенно и разбирайте решение — бесплатно.
Часто задаваемые вопросы
Умение исполнить алгоритм для формального исполнителя с фиксированным набором команд. Обычно это исполнитель-редактор строк с двумя командами — заменить(v, w), которая меняет первое слева вхождение цепочки v на w, и нашлось(v), которая только проверяет наличие цепочки, не меняя строку. В кодификаторе это проверяемый элемент содержания 3.3, раздел «Алгоритмы и программирование».
1 первичный балл по принципу «всё или ничего»: ответ либо полностью совпадает с эталоном, либо задание оценивается в 0, частичного зачёта нет. По обобщённому плану варианта КИМ (спецификация ФИПИ) примерное время выполнения задания 12 — 6 минут. Уровень сложности — повышенный, таких заданий во всей работе 11 из 27.
Команда заменить(v, w) исполнителя меняет только первое слева вхождение цепочки v. Метод str.replace(v, w) в Python без третьего аргумента меняет ВСЕ вхождения сразу — это не то же самое. Чтобы эмулировать исполнителя точно, нужно писать s.replace(v, w, 1), где третий аргумент 1 ограничивает замену одним, самым левым вхождением.
Инвариант — это величина (длина строки, сумма цифр, количество конкретной цифры), которая меняется по предсказуемому правилу при каждой замене, независимо от места замены и порядка срабатывания команд. Если инвариант найден, ответ на задание можно посчитать прямой формулой, не моделируя всю строку посимвольно — это особенно важно, когда строка состоит из тысяч символов.
Есть два рабочих приёма. Первый — прогнать программу вручную на коротких входах (4, 8, 12, 16 символов того же вида) и найти периодическую закономерность, которая сводит большое число к уже посчитанному короткому случаю. Второй, самый надёжный — написать эмулятор на Python, который дословно повторяет описание команд заменить и нашлось, и запустить его на реальных числах из условия.
Тело цикла — это последовательность команд, выполняемая строго сверху вниз. Если между блоками ЕСЛИ нет слова ИНАЧЕ, это независимые команды: за одну итерацию цикла может произойти несколько замен подряд, причём каждая следующая проверяется уже на строке, изменённой предыдущей командой. Если же есть конструкция ЕСЛИ/ИНАЧЕ, за итерацию срабатывает ровно одна из двух веток.
Да. Если вопрос звучит как «какая строка получится», в ответ нужно записать всю результирующую строку целиком — цепочку цифр без пробелов, кавычек и слова «строка», даже если она состоит из десятков или сотен символов. Другие два вида вопроса — «определите количество цифр X» и «определите наименьшее/наибольшее значение параметра n» — требуют записать только одно число.
Задания 5 и 6 базового уровня используют короткие алгоритмы и простых исполнителей, которые можно полностью пройти вручную за пару минут. Задание 12 — повышенного уровня: строка обычно длинная или задана параметром n, а без инварианта, прогона на коротких входах или эмулятора получить верный ответ вручную практически невозможно.
Готовы взять балл повышенного уровня?
Задание 12 подчиняется трём приёмам: инвариант, прогон на коротких входах, эмулятор на Python. Отработайте их на реальных программах из открытого банка ФИПИ с мгновенной проверкой ответа — и семантика исполнителя перестанет быть источником обидных ошибок.