ex exxam.ru
Задания12 из 27
01 Графы: схема дорог и таблица расстояний 02 Логика: фрагмент таблицы истинности, порядок столбцов 03 Базы данных: поиск информации в связанных таблицах 04 Кодирование: условие Фано и двоичное дерево кода 05 Двоичная запись числа: алгоритм строит новое число 06 Исполнитель Черепаха: движение и подсчёт точек 07 Информационный объём: звук и изображения 08 Подсчёт слов: лексикографический список и перебор 09 Электронные таблицы: подсчёт строк по условию 10 Текстовый документ: поиск сочетаний букв по условию 11 Объём данных: мощность алфавита и кодирование 12 Исполнитель МТ (машина на ленте): чтение программы текущее13 IP-адреса и маски сетей TCP/IP 14 Арифметические выражения и системы счисления 15 Логика: истинность выражения с отрезками и предикатами 16 Рекурсивные функции: чтение и счёт по формулам 17 Обработка целочисленной информации: поиск пар в файле 18 Динамическое программирование: Робот-сборщик монет 19 Игры: выигрышная стратегия первым ходом (куча) 20 Игры: победа Пети своим вторым ходом (куча) 21 Игры: победа Вани первым или вторым ходом (куча) 22 Многопоточные вычисления: максимальное число одновременных процессов 23 Динамика: количество программ исполнителя 24 Обработка символьных строк: поиск подстроки по условию 25 Перебор чисел: делители и сумма M 26 Задание 26 нужны файлы27 Задание 27 нужны файлы
12
1 балл демоверсия ЕГЭ-2026

Исполнитель МТ (машина на ленте): чтение программы

Задание 12 · Билет 1 · ЕГЭ по информатике

Билет 1 — демоверсия ЕГЭ-2026; остальные билеты — задания в формате экзамена (открытый сборник или тренировочные по образцу). Это тренировочные материалы, а не официальные КИМ. Ответы пересчитаны и сверены.

Условие

Исполнитель МТ — головка, передвигающаяся по бесконечной горизонтальной ленте, разделённой на ячейки (алфавит: 0, 1 и пустой символ λ). На каждом такте головка смотрит на текущую ячейку и выполняет команду из таблицы «символ → состояние». Команда: записать символ, затем L (влево), R (вправо), N (не двигаться) или S (завершить работу), затем перейти в состояние.

На ленте записана последовательность из 1000 символов, состоящая только из 0 и 1. Ячейки справа и слева заполнены пустым символом λ. В начальный момент головка стоит в ближайшей ячейке справа от последовательности.

Программа исполнителя:

λ10
q0λ, L, q1
q1λ, S, q10, S, q11, L, q1

После выполнения программы на ленте осталось ровно 343 нуля.

Вопрос. Определите максимально возможное число нулей в исходной последовательности.

Разбор задачи

Задание 12 ЕГЭ по информатике — это исполнитель МТ и чтение его программы. Головка ходит по бесконечной ленте из ячеек и на каждом такте выполняет команду из таблицы: записать символ, сдвинуться влево или вправо и перейти в новое состояние.

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

Что важно знать

  • Задание базового уровня — оценивается в 1 балл
  • Строка — состояния q, столбцы — обозреваемые символы (0, 1, λ)
  • Головка стартует справа от строки, на пустом символе λ
  • Команда S завершает работу, L и R сдвигают влево и вправо

План решения

  1. Запишите начальную строку и отметьте положение головки (справа, на λ)
  2. Прочитайте таблицу: строка — текущее состояние, столбец — обозреваемый символ
  3. Прогоняйте машину такт за тактом, записывая изменения на ленте
  4. Дойдя до команды S, выпишите то, что осталось на ленте
  5. В обратной задаче выведите ограничение на исходную строку и найдите максимум или минимум
  6. Сверьте ответ: переведите двоичную запись в десятичную или пересчитайте символы
Не знаешь, как решать?

Потренируйся читать таблицу исполнителя МТ: прогони машину по ленте и найди результат — от короткой строки до формата экзамена.

Открыть тренажёр

Решение

Теория с нуля: что нужно знать
1. Лента, состояние и таблица: как устроен исполнитель МТ

Исполнитель МТ — это головка, которая ходит по бесконечной горизонтальной ленте, разделённой на ячейки. В каждый момент головка обозревает ровно одну ячейку; другой памяти у машины нет — ни переменных, ни счётчиков.

Символы ленты — это данные. На ленте используются 0 и 1 (рабочие символы, из них состоит запись) и λ — пустой символ, которым заполнены все ячейки справа и слева от строки. λ нужен, чтобы у записи был явный край: дойдя до него, головка понимает, что вышла за пределы строки. Машина пишет символ в текущую ячейку, затирая прежнее значение. Число в МТ — это просто последовательность символов в соседних ячейках.

Состояние q — это режим исполнителя. Это не символ на ленте, а внутренняя пометка самой машины: «в каком режиме я работаю сейчас». Удобно представлять состояния как разные режимы работы: есть режим старта, с которого машина начинает работу, рабочие режимы, в которых выполняется основная часть алгоритма, и режимы, из которых машина завершает работу.

Состояний конечное число, но их может быть сколько угодно — столько, сколько нужно алгоритму. Рабочих режимов бывает несколько, и завершающих тоже может быть несколько: остановиться можно из разных состояний и по разным условиям. Например, во втором билете остановка на λ возможна из q2 или q3 — это два разных завершающих режима. Для удобства режимы просто обозначили буквой и цифрой — q0, q1, q2, … Это только имена: смысл не в номере, а в том, что машина делает в этом режиме.

Состояние — одна величина, но именно оно позволяет машине помнить контекст между тактами и вести себя по-разному в похожих ситуациях. В задачах стартовый режим — обычно q0.

Таблица программы смотрит на пару — состояние и символ. Это важная деталь: таблица берёт не только обозреваемый символ, а пару «текущее состояние + символ под головкой» и по ней находит команду. Строка таблицы — текущее состояние q, столбец — обозреваемый символ (0, 1 или λ), на их пересечении — команда. Поэтому состояние и нужно: один и тот же символ 1 в состояниях q1 и q2 может обрабатываться по-разному, и без состояния машина не знала бы, какую строку таблицы взять.

Состояние и позиция головки — разные вещи. Кроме состояния, у машины есть позиция головки — какая именно ячейка обозревается сейчас. Её называют отдельно: состояние = q («в каком режиме работает исполнитель»), а положение головки — «где на ленте он стоит». Полное описание системы на данный момент — это содержимое ленты, позиция головки и текущее состояние, но команду определяет только пара «состояние + символ под головкой».

Команда и один такт. В клетке таблицы записано три вещи: какой символ записать, как сдвинуться (L — влево, R — вправо, N — остаться на месте, S — остановиться) и в какое состояние перейти. Такт выполняется по порядку:

  1. посмотреть на символ под головкой;
  2. по паре «текущее состояние + этот символ» найти команду в таблице;
  3. записать символ в текущую ячейку;
  4. сдвинуться (L, R или N) или остановиться (S);
  5. перейти в новое состояние.

Старт и остановка. В начальный момент головка стоит в ближайшей ячейке справа от строки, на символе λ, а машина — в стартовом состоянии. Работа заканчивается командой S (или когда для пары «состояние + символ» команды в таблице нет). После остановки на ленте остаётся результат: его читают слева направо и при необходимости переводят в десятичную запись.

Аналогия: символы — это буквы на бумаге, состояние — «на каком шаге алгоритма я нахожусь», а таблица — инструкция, что делать на каждом шаге при каждой прочитанной букве. Ниже — живая анимация: выберите готовую программу или введите свою ленту.

q0
λ -2
λ -1
1 0
1 1
0 2
1 3
λ 4
λ 5
λ 6
такт 0
Старт
головка на λ справа, состояние q0

лента · ячейки с индексами, пустые — λ

λ10
q0λ, L, q1
q1λ, S, q10, L, q11, L, q1

программа · строка — состояние, столбец — обозреваемый символ

Старт. Головка стоит на λ справа от строки, состояние q0. Нажмите «Шаг» или «Запустить» — прогон идёт по подшагам: чтение → запись → сдвиг → состояние.

0/ 6 тактов
2. Чем состояния отличаются друг от друга

Имя ничего не значит. q0, q1, q2 — просто ярлыки; смысл состояния целиком в его строке таблицы. Переименуй q1 в q2 согласованно по всей таблице — поведение не изменится. Разница между состояниями — не в номере, а в том, что они делают.

Два состояния разные, если ведут себя по-разному. Сравнивают строки: если для одного и того же символа команды отличаются (пишут разное, идут в разные стороны, переходят в разные состояния) — это разные режимы. Если строки совпадают — состояния взаимозаменяемы: их можно слить, и программа станет короче.

Состояния нужны не «для разнообразия», а чтобы помнить контекст. У машины нет памяти, кроме ленты, а на каждом такте она видит только пару «состояние + символ». Если действие должно зависеть от того, что было раньше, эту информацию кладут в состояние — по сути, состояние это «на каком шаге алгоритма я сейчас».

Первый пример — две встречи одного и того же λ. В «Инверторе» q0: λ → λ, L, q1 и q1: λ → λ, S, q1. Головка дважды видит λ: сначала стартовый λ справа (надо войти в строку, L), потом λ на левом крае (надо остановиться, S). Символ один и тот же, а действия разные. Одним состоянием это не описать: при λ → L машина уедет влево навсегда, при λ → S встанет сразу. Значит, q0 и q1 функционально необходимы, а не «для разнообразия».

Второй пример — память о предыдущем символе. Во втором билете (q1, q2, q3) q2 и q3 обрабатывают одну и ту же 1 по-разному: в q2 она становится 0, в q3 остаётся 1. Так можно только потому, что состояние помнит, что было прочитано раньше.

Третий пример — две фазы. В том же «Инверторе» q0 только заходит в строку, q1 переворачивает. Два состояния = две фазы: «войти» и «работать».

Итог: состояние — это фаза (ветка) алгоритма, а q0 — стартовое по соглашению, не «главное». Сколько разных контекстов нужно различать — столько и состояний.

3. Как читать команду в клетке таблицы

В каждой клетке таблицы записана команда из трёх частей, всегда в одном порядке: что записать — как сдвинуться — в какое состояние перейти. Читаем слева направо: «запиши …, шагни …, перейди в …».

Что записать (первая часть):

  • λ — стереть: записать пустой символ;
  • 0 — записать 0;
  • 1 — записать 1.

Как сдвинуться (вторая часть): L — влево, R — вправо, N — остаться на месте, S — остановиться.

Куда перейти (третья часть): состояние, например q1; при S состояние уже неважно — машина встала.

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

  • λ, L, q1 — стереть символ, сдвинуться влево, перейти в q1;
  • 0, L, q1 — записать 0, идти влево, перейти в q1;
  • 1, L, q2 — записать 1, идти влево, перейти в q2;
  • 1, R, q2 — записать 1, идти вправо, перейти в q2;
  • 0, N, q3 — записать 0, остаться на месте, перейти в q3;
  • λ, S, q1 — стереть символ и остановиться.

Важное: первая часть не обязана совпадать с прочитанным символом: тот же — машина «переписывает» его, другой — заменяет, λ — стирает. Пустая клетка в таблице означает, что для этой пары «состояние + символ» команды нет — машина останавливается.

4. На сколько ячеек движется головка и может ли зациклиться

За один такт головка сдвигается ровно на одну ячейку (или остаётся на месте): L — на одну влево, R — на одну вправо, N — не двигается, S — работа заканчивается. Перепрыгнуть через ячейку или уехать сразу на несколько за один такт нельзя.

Направление не обязано быть всё время одним и тем же. Команды могут чередовать L и R, поэтому головка ходит туда-сюда. «Двигаться всегда в одну сторону» правило не требует — важно лишь, что за такт шаг не больше одной ячейки.

Лента бесконечна в обе стороны: «выйти за край» головка не может — за пределами записи стоят пустые символы λ. За такт меняется ровно одна ячейка — та, что под головкой.

Головка может зациклиться. Если программа возвращает машину в ту же конфигурацию — то же состояние, та же ячейка, то же содержимое ленты, — дальше всё повторяется бесконечно. Пример: q0: 0 → 0, R, q1 и q1: 0 → 0, L, q0 — на ленте из нулей машина бегает между двумя ячейками и никогда не остановится.

В задачах ЕГЭ программа обычно останавливается (ответ конечен), но формально незавершающаяся программа возможна — это проверяют прогоном. Наш демонстратор защищён пределом тактов: если остановки долго нет, он пишет, что машина не останавливается.

5. Что спрашивают в задании 12
Есть два основных типа. Первый: дана начальная строка — нужно найти, что окажется на ленте после остановки (двоичное число, количество нулей или единиц). Второй, обратный: известно, что получилось на ленте, — нужно найти такую начальную строку, при которой это возможно, чаще всего максимальную или минимальную. В обоих случаях машину прогоняют по таблице шаг за шагом.
6. Как оформлять и проверять ответ
Ответ задания — обычно целое число. Если спрашивают десятичное значение, переведите полученную двоичную запись в десятичную; ведущие нули незначащи. Если спрашивают количество символов, считайте их на итоговой ленте. Проверка: прогоните программу на короткой строке вручную, чтобы убедиться, что поняли команды верно, и только потом считайте на нужной.

Решение

открыто шагов: 7 из 7
1 Шаг 1
Подход. Читаем таблицу как программу: строка — состояние, столбец — обозреваемый символ, а команда = «записать символ, сдвинуться, перейти в состояние». Головка стартует справа от строки, на символе λ. Прогоняем машину и по её действию выводим ограничение на исходную строку.
2 Шаг 2
Разбираем программу. Головка стартует справа (на λ, состояние q0): команда λ, L, q1 сдвигает её влево в строку, состояние q1.
3 Шаг 3
В состоянии q1 при чтении 0 машина записывает 1 и идёт дальше влево (1, L, q1). При чтении 1 она записывает 0 и останавливается (0, S, q1). На левом краю (λ) — тоже стоп (λ, S, q1).
4 Шаг 4
Вывод: машина идёт по строке справа налево, превращая нули в единицы, пока не встретит первую единицу — её превращает в ноль и останавливается.
5 Шаг 5
Чтобы после остановки осталось ровно 343 нуля: нули слева от этой «первой» единицы (пусть k штук) не меняются, а сама единица станет нулём → k + 1 = 343, значит k = 342.
6 Шаг 6
Нули справа от этой единицы машина успела превратить в единицы — на итоговое число нулей они не влияют. Значит исходных нулей можно взять тем больше, чем их больше справа. Чтобы нулей было максимум, остальные символы строки должны быть нулями, а единственная единица — стоять сразу после 342 нулей.
7 Шаг 7
Тогда исходных нулей: 342 (слева) + 657 (справа) = 999, а одна единица нужна, чтобы машина вообще остановилась (без неё все 1000 нулей превратились бы в единицы). Максимум = 999.
Правильный ответ этого билета: 999
Проверка: конструкция «342 нуля + одна 1 + 657 нулей» даёт на выходе ровно 343 нуля;
максимум исходных нулей = 999. Совпадает с эталоном демоверсии.

Проверка

Типовые ошибки и проверка
  • Путают сдвиг и запись: в команде «0, L, q1» сначала записывается 0, и только потом головка идёт влево.
  • Забывают, что головка стартует справа от строки, на символе λ, и первый такт уводит её внутрь.
  • Не учитывают команду S: она останавливает машину в середине строки, и часть символов остаётся нетронутой.
  • Путают прямой и обратный вопрос: ищут результат, хотя даны начальные данные, или наоборот.
  • В обратной задаче берут первое подходящее число, хотя нужен максимум или минимум.
  • Проверка: прогоните программу на короткой строке вручную, затем пересчитайте на нужной и убедитесь, что итог на ленте совпадает с условием.

Режимы

Сейчас открыт режим обучения: теория, разбор и ответ видны. Скоро появится режим проверки — только условие и поле ответа, без подсказок.

Практикум Все задания Режим проверки — скоро

Частые вопросы

Что проверяет задание 12 ЕГЭ по информатике?
Умение читать программу исполнителя МТ и проследить её работу: по таблице команд и начальной строке найти, что останется на ленте, или по известному результату определить исходные данные.
Как читать таблицу программы?
Строки — состояния q, столбцы — символы, которые видит головка (0, 1 или пустой λ). В клетке записана команда: какой символ записать, как сдвинуться (L — влево, R — вправо, N — на месте) и в какое состояние перейти.
Где стоит головка в начале?
В ближайшей ячейке справа от записанной строки, то есть на пустом символе λ. Первая команда обычно сдвигает её влево, внутрь строки.
Что делать, если спрашивают максимум или минимум?
Это обратная задача. Прогоном выясняют, при каком условии на ленте получится заданный результат, затем берут наибольшую или наименьшую подходящую строку. Не забывайте: машина должна где-то остановиться — например, ей нужна единица, на которой сработает команда остановки.
Можно ли потренировать задание 12?
Да. Практикум собирает программы и короткие ленты: нужно пройти по таблице и найти результат. Есть уровни от разминки до формата экзамена, проверка ответа и разбор по шагам.