ЕГЭ · Информатикаподготовка по заданиям
Задание 12 из 27Алгоритмы

Алгоритмы и программирование · 1 балл

Исполнитель МТ

Машина Тьюринга

Выполнить программу машины Тьюринга: проследить за лентой или восстановить исходные данные по результату.

Алгоритмы целое число

Что проверяет

Умение исполнить алгоритм для конкретного исполнителя с фиксированным набором команд: лента, головка, состояния и таблица команд исполнителя МТ.

Основание: проект спецификации и кодификатора КИМ 2027. Открыть документы

Теория

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

Задание 12 проверяет умение исполнить алгоритм для исполнителя с фиксированным набором команд. В банке Kompege это исполнитель МТ — машина Тьюринга: бесконечная лента, читающая и записывающая головка, алфавит с пустым символом λ и программа в виде таблицы. В 2027 году тематика задания не менялась. Нужно либо выполнить программу и записать результат, либо по результату восстановить исходные данные, количество символов или их сумму.

Минимум для задания 12

  • как устроены лента, ячейки и головка
  • что такое алфавит исполнителя и пустой символ λ
  • что такое состояние головки и начальное состояние q0
  • как читать таблицу: строки — состояния, столбцы — символы
  • из каких трёх частей состоит команда
  • что означают L, R, N и S
  • в каком порядке выполняются запись, сдвиг и смена состояния
  • как вести трассировку ленты
  • как считать количество и сумму цифр
  • как строить уравнения по изменениям символов
  • как восстановить исходное число по конечной ленте
  • как искать максимальное и минимальное значение
  • как перебирать варианты на Python
  • как проверить ответ повторным выполнением

Как устроено задание 12

По спецификации 2027 года задание проверяет умение исполнить алгоритм для конкретного исполнителя с фиксированным набором команд. В базе Kompege почти все задачи этого номера построены на исполнителе МТ — машине Тьюринга. Задание относится к разделу «Алгоритмы и программирование», оценивается в 1 первичный балл и считается заданием повышенного уровня.

  • Ответ — целое число: результат, количество, сумма или восстановленное значение.
  • В условии дана таблица команд и описано начальное положение ленты.
  • Лента почти всегда состоит из нулей и единиц, иногда добавляются двойки, тройки или буквы.
  • Встречаются задачи на прямое выполнение, подсчёт, сумму, восстановление и экстремумы.
  • Файлы к заданию не прилагаются: все данные есть в тексте и таблице.
  • Время выполнения — около 6 минут, но длинную ленту нельзя трассировать по шагам.

Лента, алфавит и головка

Лента бесконечна и разделена на одинаковые ячейки. В каждой ячейке записан ровно один символ алфавита. Специальный символ λ (a0) означает пустую ячейку. Последовательность из условия занимает соседние ячейки, а справа и слева от неё находятся λ. Головка читает текущую ячейку, может записать в неё символ и сдвинуться.

  • В начальный момент головка стоит в состоянии q0.
  • Головка может находиться слева от последовательности, справа от неё или над заданным символом.
  • За один такт головка обрабатывает ровно одну ячейку.
  • Машина может выйти за пределы последовательности в ячейки с λ.
  • Если в условии сказано «без ведущих нулей», первый символ последовательности не равен 0.
  • Двоичная последовательность на ленте — это запись числа, а не набор цифр.
  • Пустые символы λ не входят в итоговое число, но важны для остановки.
  • Лента не обрывается: машина может уходить влево и вправо сколько угодно.
A = {a0, a1, …, an−1}a0 = λQ = {q0, q1, …, qm−1}

Как читать таблицу команд

Программа машины Тьюринга задаётся таблицей. В первой строке перечислены символы, которые могут стоять в текущей ячейке. В первом столбце — состояния головки. На пересечении строки и столбца записана команда, которую нужно выполнить. Пустая клетка означает, что такая пара «состояние — символ» невозможна.

  • Порядок столбцов может быть λ, 0, 1 или λ, 1, 0 — всегда сверяйтесь с заголовком.
  • Команда состоит из трёх частей: записываемый символ, направление, новое состояние.
  • Запись 0, L, q3 означает: записать 0, сдвинуться влево, перейти в q3.
  • Запись 1, R, q1 означает: записать 1, сдвинуться вправо, остаться в q1.
  • Если записывается тот же символ, содержимое ячейки не меняется.
  • Сначала символ записывается, и только потом головка сдвигается.
  • Пустая клетка не означает «ничего не делать»: команды просто нет.
  • В экзаменационных задачах до пустой клетки обычно не доходят.
a, D, qa ∈ A, q ∈ QD ∈ {L, R, N, S}

Один такт и трассировка

Такт выполняется по одному и тому же правилу: посмотреть на символ под головкой, найти в таблице нужную строку и столбец, выполнить команду, записать новый символ, сдвинуть головку и сменить состояние. Для ручной проверки удобно выписывать состояние, ленту с отметкой головки и выполненную команду.

  • Отметьте головку квадратными скобками: λ[1]010.
  • На каждом шаге выписывайте только изменившуюся ячейку.
  • Сдвиг L уменьшает позицию головки на 1, R увеличивает на 1.
  • N оставляет головку на месте, но состояние может измениться.
  • S завершает работу после записи символа; сдвига при S нет.
  • Если состояние после команды то же, машина продолжает с новой ячейки.
  • Остановитесь, когда встретили S или пустую клетку.
  • В конце прочитайте последовательность между λ и переведите её в число.
write → move → stateL: i → i − 1R: i → i + 1N: i → i

Типовые программы МТ

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

  • Сканирование: головка идёт в одну сторону, записывая те же символы, и останавливается на λ.
  • Переворот: 0 заменяется на 1, а 1 — на 0; количества нулей и единиц меняются местами.
  • Сдвиг числа: дописывание нуля справа удваивает двоичное число.
  • Прибавление единицы: машина идёт по младшим разрядам и обрабатывает перенос.
  • Каждый второй символ: состояния чередуются, поэтому меняются позиции одной чётности.
  • Циклическая замена: например, 0 → 2, 1 → 0, 2 → 1.
  • Копирование и разворот строки: больше состояний, но принцип трассировки тот же.
  • Если программа не меняет символы, её результат — исходная последовательность.
0 ↔ 10 → 2 → 1 → 0запись 0 справа: N → 2N

От выполнения к подсчёту

Если на ленте 1000 символов, трассировать каждый такт бессмысленно. Нужно понять, сколько символов каждого вида изменится и во что они превратятся. После этого задача сводится к системе уравнений на количества n0, n1, n2 и общую длину L. Такой подход работает и для суммы цифр.

  • Обозначьте количество каждого символа: n0, n1, n2, …
  • Длина последовательности: n0 + n1 + n2 + … = L.
  • Сумма значений: S = 0·n0 + 1·n1 + 2·n2 + …
  • Для каждой пары «было → стало» запишите изменение количества.
  • Если программа переворачивает все биты, то новый n1 равен старому n0.
  • Если меняется каждый второй символ, считайте позиции, а не все символы подряд.
  • Условие «во сколько раз больше» даёт уравнение вида n1 = k·n0.
  • Условие «на сколько больше» даёт уравнение вида S1 − S2 = d.
n0 + n1 + n2 = LS = n1 + 2n2 + 3n3n1(конечн) = n0(нач) при перевороте

Обратная задача

В обратной задаче известна конечная лента, а нужно найти начальную. Если программа обратима, команды можно выполнить в обратном порядке: вернуть старый символ, сдвинуться в противоположную сторону и перейти к предыдущему состоянию. Если обратить программу сложно, проще перебрать возможные начальные числа или строки и выполнить программу вперёд.

  • Для обратимых программ меняйте L на R, R на L, N на N.
  • Порядок команд при обратном ходе — от последней к первой.
  • Если программа дописывает 0 справа, конечное число в два раза больше начального.
  • Если программа дописывает 1, из конечного числа вычитают 1 и делят на 2.
  • Перебор удобен, когда начальное число невелико или задана граница.
  • Двоичная строка переводится в число через int(s, 2).
  • Не забывайте про возможные ведущие нули: они могут не входить в ответ.
  • Найденное значение обязательно подставьте в программу и проверьте.
int(s, 2)bin(n)[2:]N = 2·N₀ + d

Максимум, минимум и неизвестный символ

В задачах на экстремум известно конечное количество или сумма, а найти нужно наибольшее или наименьшее начальное значение. Сначала определите, какие символы программа меняет и как расположение влияет на число изменений. Затем используйте ограничение на длину последовательности. Неизвестный символ X находится из уравнения и проверяется как цифра от 0 до 9.

  • Число изменённых символов зависит от их расположения, а не только от количества.
  • Чтобы максимизировать начальное количество, минимизируйте или максимизируйте число изменений.
  • Помните об ограничении длины: количество символов не может превышать L.
  • Если в последовательности есть хотя бы один другой символ, остальные могут быть нулями.
  • Для неизвестного X составьте уравнение с X и решите его.
  • X — десятичная цифра, поэтому 0 ≤ X ≤ 9.
  • Проверьте, что при найденном X все условия выполняются.
  • Для сложных случаев переберите X или количество символов на Python.
n0(нач) = n0(конечн) + изменённыеn0(нач) ≤ L − 10 ≤ X ≤ 9

Проверка ответа

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

  • Проверьте начальную позицию головки и состояние q0.
  • Убедитесь, что учитывались λ за границами последовательности.
  • Проверьте, что S срабатывает после записи, а не до неё.
  • Пересчитайте конечную сумму и конечное количество символов.
  • Убедитесь, что ответ — целое число в нужных единицах.
  • Если ответ — двоичная строка, переведите её в десятичное число.
  • Если в ответе получается ведущий ноль, проверьте, не потерян ли он.
  • При переборе выведите все подходящие варианты и выберите нужный по условию.
проверка: выполнить программу зановопроверка: подставить в уравнение

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

Трассировка программы, которая переворачивает биты

На ленте записано 1010, головка стоит слева от последовательности в состоянии q0. Программа: q0 на λ пишет λ, идёт вправо и переходит в q1; q1 на 0 пишет 1, на 1 пишет 0 и идёт вправо; на λ машина останавливается.

Переворот бит: пошаговая трассировка
ШагСостояниеЛентаКоманда
0q0[λ]1010начало
1q0λ[1]010λ, R, q1
2q1λ0[0]100, R, q1
3q1λ01[1]01, R, q1
4q1λ010[0]0, R, q1
5q1λ0101[λ]λ, S, q1
  1. Головка стоит на λ слева от последовательности, состояние q0.
  2. По команде λ, R, q1 головка переходит на первую цифру 1.
  3. Цифра 1 заменяется на 0, головка идёт вправо и остаётся в q1.
  4. Цифра 0 заменяется на 1, головка идёт дальше.
  5. Так обрабатываются все четыре цифры: 1010 превращается в 0101.
  6. На пустой ячейке λ машина записывает λ и останавливается по команде S.

Ответ0101₂ = 5.

Способы решения

Выберите метод под формулировку

Методы собраны по решениям задания 12 из базы Kompege. Начните с того, что именно нужно найти в условии.

01

когда лента короткая

Прямое исполнение по таблице

Когда использовать: Нужно получить точный результат, а последовательность небольшая: 4–12 символов.

  1. Выпишите заголовки столбцов и убедитесь, в каком порядке идут символы.
  2. Отметьте начальную позицию головки и состояние q0.
  3. Для текущей пары «состояние — символ» найдите команду в таблице.
  4. Запишите новый символ, затем сдвиньте головку и смените состояние.
  5. Повторяйте, пока не встретится S или пустая клетка.
  6. Прочитайте конечную последовательность и переведите её в число.

Пример

Та же программа переворота бит. На ленте 1011, головка слева. После выполнения получается 0100, то есть 4 в десятичной системе.

# ручная трассировка для 1011
# q0: λ -> λ, R, q1
# q1: 0 -> 1, R, q1
# q1: 1 -> 0, R, q1
# q1: λ -> λ, S, q1
#
# [λ]1011 -> λ[1]011 -> λ0[0]11 -> λ01[1]1 -> λ010[1] -> λ0100[λ]
print(int("0100", 2))

Ответ4.

По мотивам задачи № 22153 (база Kompege).

02

когда шагов слишком много

Эмулятор МТ на Python

Когда использовать: Нужно проверить длинную трассировку или перебрать несколько начальных строк.

  1. Задайте программу словарём: ключ — пара «состояние, символ».
  2. Храните ленту в словаре, чтобы не выделять бесконечный массив.
  3. На каждом шаге читайте символ, выполняйте запись и сдвиг.
  4. Останавливайтесь на S или на отсутствующей команде.
  5. Соберите ленту от минимальной позиции до максимальной.
  6. Уберите λ по краям и переведите результат.

Пример

Универсальный эмулятор для программы переворота бит. Для входа 1010 он печатает 0101.

def run(tape, head, program, state="q0", limit=1_000_000):
    cells = {i: c for i, c in enumerate(tape)}
    for _ in range(limit):
        symbol = cells.get(head, "λ")
        command = program.get((state, symbol))
        if command is None:
            break
        write, move, state = command
        cells[head] = write
        if move == "S":
            break
        if move == "L":
            head -= 1
        elif move == "R":
            head += 1
    left, right = min(cells), max(cells)
    return "".join(cells.get(i, "λ") for i in range(left, right + 1)).strip("λ")

program = {
    ("q0", "λ"): ("λ", "R", "q1"),
    ("q1", "0"): ("1", "R", "q1"),
    ("q1", "1"): ("0", "R", "q1"),
    ("q1", "λ"): ("λ", "S", "q1"),
}
print(run("1010", -1, program))

Ответ0101.

По мотивам задач № 22153 и 23727 (база Kompege).

03

когда программа меняет каждый символ

Считать изменения, а не такты

Когда использовать: Лента длинная, но программа обрабатывает символы по одному простому правилу.

  1. Определите, во что превращается каждый символ: 0 → 1, 1 → 0 и так далее.
  2. Запишите новые количества через старые.
  3. Используйте условие задачи: «втрое больше», «на 178 больше» и т. п.
  4. Добавьте уравнение длины последовательности.
  5. Решите систему и проверьте, что количества целые и неотрицательные.
  6. Подставьте ответ в условие и пересчитайте конечную ленту.

Пример

На ленте 1000 нулей и единиц. Программа переворачивает все биты. После выполнения единиц стало втрое больше, чем нулей. Если начальных единиц x, то начальных нулей 1000 − x. После переворота единиц стало 1000 − x, а нулей x. Уравнение: 1000 − x = 3x, откуда x = 250.

total = 1000
for ones in range(total + 1):
    zeros = total - ones
    # после переворота: единиц = zeros, нулей = ones
    if zeros == 3 * ones:
        print(ones)

Ответ250.

По мотивам задачи № 23727 (база Kompege).

04

когда дана сумма значений

Уравнения по сумме цифр

Когда использовать: На ленте цифры 0, 1, 2, …, а условие связывает сумму до и после выполнения.

  1. Обозначьте количества цифр переменными.
  2. Запишите сумму исходной строки.
  3. По таблице команд определите, во что превращается каждая цифра.
  4. Запишите сумму конечной строки через те же переменные.
  5. Добавьте уравнение длины и уравнение на разность или отношение сумм.
  6. Решите систему и ответьте на вопрос именно про нужную цифру.

Пример

1000 символов из 0, 1 и 2. Единиц и двоек поровну: по y, нулей x, поэтому 2y + x = 1000. Программа заменяет 0 → 2, 1 → 0, 2 → 1. Сумма была 3y, стала 2x + y. Разность равна 178: 3y − (2x + y) = 178. Решение: y = 363, x = 274. Спрашивают количество двоек, то есть y.

for x in range(1001):
    for y in range(1001):
        if 2 * y + x == 1000 and 3 * y - (2 * x + y) == 178:
            print("нулей:", x, "двоек:", y)

Ответ363.

По мотивам задачи № 24173 (база Kompege).

05

когда состояния чередуются

Каждый второй символ

Когда использовать: Программа обрабатывает не все символы подряд, а позиции одной чётности.

  1. Проследите за короткой строкой и отметьте, какие позиции меняются.
  2. Определите, считается ли позиция от левого или от правого края.
  3. Посчитайте количество таких позиций для длины L.
  4. Сравните с количеством нулей или единиц в условии.
  5. Для максимума поставьте нужные символы именно на изменяемые позиции.
  6. Проверьте ответ на коротком примере.

Пример

В строке 249 бит. Программа переворачивает каждый второй бит, начиная со второго справа, то есть позиции 2, 4, 6, …, 248. Таких позиций 124. Нулей в строке 137, поэтому все 124 изменяемые позиции можно заполнить нулями. Максимальное число нулей, которые станут единицами, равно 124.

n = 249
zeros = 137
changed_positions = n // 2
print(min(zeros, changed_positions))

Ответ124.

По мотивам задачи № 23819 (база Kompege).

06

когда дана конечная лента

Обратная задача: восстановить начало

Когда использовать: Известно, что получилось после программы, а нужно найти исходное число или строку.

  1. Поймите, что программа делает с числом: удваивает, дописывает цифру, переворачивает биты.
  2. Если операции обратимы, выполните их в обратном порядке.
  3. Если программа сложная, переберите возможные начальные значения.
  4. Переведите двоичную запись в десятичное число и обратно.
  5. Учтите ограничение на ведущие нули и границы перебора.
  6. Подставьте найденное начало в программу и проверьте конец.

Пример

Программа дописывает 0 справа к двоичной записи, то есть удваивает число. После выполнения на ленте оказалось 320. Значит, исходное число было 160: 160 · 2 = 320. В двоичной записи: 10100000 → 101000000.

final = 320
initial = final // 2
print(bin(initial)[2:], initial)

Ответ160.

По мотивам задач № 25015, 25071 и 26090 (база Kompege).

07

когда спрашивают «наибольшее возможное»

Максимум и минимум по финальному количеству

Когда использовать: Известно, сколько символов осталось после программы, а нужно найти максимум или минимум в исходной строке.

  1. Определите, какие символы программа меняет и в какую сторону.
  2. Выразите начальное количество через конечное и число изменений.
  3. Оцените число изменений через длину строки и расположение символов.
  4. Для максимума выберите расположение, при котором изменяется больше всего нужных символов.
  5. Проверьте, что в строке остаётся место для остальных символов.
  6. Подставьте ответ в условие и пересчитайте конечное количество.

Пример

Длина строки 1000. Программа идёт справа налево, превращает нули в единицы, а первую встреченную единицу заменяет на 0 и останавливается. После работы осталось 343 нуля. Чтобы начальных нулей было как можно больше, оставим в строке единственную единицу, а нули расположим так: 342 нуля слева от неё и 657 нулей справа. Машина перевернёт 657 нулей в единицы, заменит единицу на 0 и остановится. Конечных нулей: 342 + 1 = 343. Начальных нулей было 342 + 657 = 999.

length = 1000
final_zeros = 343
max_initial_zeros = length - 1  # хотя бы одна единица должна остаться
print(max_initial_zeros)

Ответ999.

По мотивам задачи № 23750 (база Kompege).

08

когда в строке есть символ X

Неизвестная цифра X

Когда использовать: Часть символов обозначена X, а дана конечная сумма или количество.

  1. Обозначьте количество символов X или оставьте X как значение цифры.
  2. Запишите сумму или количество после программы через X.
  3. Используйте уравнение длины и условие задачи.
  4. Решите уравнение относительно X.
  5. Проверьте, что X — целая цифра от 0 до 9.
  6. Подставьте X и пересчитайте конечную сумму.

Пример

В строке 100 символов: 50 нулей, 30 единиц и 20 символов X. Программа заменяет 0 → 1 и 1 → 2, а X оставляет без изменения. После выполнения сумма стала 170. Конечная сумма: 50·1 + 30·2 + 20·X = 110 + 20X. Уравнение 110 + 20X = 170 даёт X = 3.

for X in range(10):
    final_sum = 50 * 1 + 30 * 2 + 20 * X
    if final_sum == 170:
        print(X)

Ответ3.

По мотивам задачи № 23815 (база Kompege).

09

перед записью ответа

Проверка и типичные ловушки

Когда использовать: Ответ уже получен, но нужно быстро найти обидную ошибку.

  • Проверьте порядок столбцов: λ, 0, 1 и λ, 1, 0 дают разные команды.
  • Убедитесь, что головка начинала с той стороны, которая указана в условии.
  • При сдвиге L и R не забудьте, что запись символа была раньше.
  • При S головка не сдвигается: работа сразу заканчивается.
  • Проверьте, что пустая клетка не была достигнута.
  • Пересчитайте конечную сумму: S = n1 + 2n2 + 3n3.
  • Не путайте длину строки и количество конкретных символов.
  • Помните, что двоичная запись 1010 — это 10, а не 1010.
  • Если ответ — количество, проверьте, что оно не больше длины строки.
  • Если ответ — цифра X, проверьте, что 0 ≤ X ≤ 9.
  • При переборе выведите все решения и выберите минимальное или максимальное.
  • Сделайте обратный счёт: подставьте ответ в исходное условие.

Шпаргалка: формулировка → метод

В условииЧто делать
«таблица команд»строки — состояния, столбцы — символы
«команда a, D, q»записать a, сдвиг D, состояние q
«L»сдвиг влево
«R»сдвиг вправо
«N»остаться на месте
«S»записать символ и остановиться
«пустая клетка»пара «состояние — символ» невозможна
«головка слева от строки»начать с λ перед первым символом
«головка справа от строки»начать с λ после последнего символа
«0 ↔ 1»переворот бит; количества меняются местами
«каждый второй»меняются позиции 2, 4, 6, …
«сумма цифр»S = n1 + 2n2 + 3n3
«длина сохраняется»n0 + n1 + n2 = L
«неизвестная цифра X»уравнение и проверка 0 ≤ X ≤ 9
«финальное двоичное число»int(s, 2)
«восстановить исходное»обратные команды или перебор
«наибольшее возможное»выбрать расположение символов
«наименьшее возможное»минимизировать изменения
«длинная лента»считать изменения, а не шаги
«проверка»выполнить программу заново

По базе Kompege: 351 задача, 7 решений (3 программных и 4 текстовых) и 40 задач с видеоразборами (26 VK, 14 Rutube; YouTube для задания 12 в базе нет). Для методов отобраны решения задач № 22153, 23727, 23819, 24173, 24174 и 24176; дополнительные материалы и видеоразборы — задачи № 23750, 23812, 23814, 23815, 23846, 24134, 24305, 24662, 25015, 25351, 26090, 28758 и 31509; примеры переработаны в учебные.

Разборы из видео

Задачи, которые разбирают в курсе

Условия и код показаны в кадре в конце соответствующего фрагмента. Источники задач — КомпЕГЭ, сайт К. Полякова, ФИПИ и другие.

№ 8412

разбор из видео · 2026

Машина Тьюринга: результат в десятичной

На ленте записано двоичное представление числа 375. По таблице команд машины Тьюринга определите десятичное значение числа на ленте после выполнения программы.

print(int('010001000', 2))

Ответ136

Полный архив

Все фрагменты видеоразборов

По одному пункту на каждую главу: условие или код из кадра, ответ и ссылка. Источники задач — КомпЕГЭ, сайт К. Полякова, ФИПИ и другие; номер берётся из кадра. Текст с экрана распознан автоматически, служебные строки и артефакты удалены; если текст нечитаем, остаются название, таймкод и ссылка.

Показать все фрагменты (23)
2026 · 00:00 Приветствие

В этом фрагменте — теория или пояснение; решение показано в видео.

2026 · 06:40 Что такое машина Тьюринга

В этом фрагменте — теория или пояснение; решение показано в видео.

2026 · 22:05 Какие задачи решать? 8412

Кабанов) На ленте исполнителя МТ в соседних ячейках записано двоичное представление числа 375 без ведущих нулей. Ячейки справа и слева от последовательности заполнены пустыми символами д. В начальный момент времени головка расположена в Команды движения каретки: — влево, В — вправо, № — отсутствие сдвига, $ — стоп. Определите десятичное значение числа на ленте после выполнения программы.

2026 · 25:50 Выполнение алгоритма руками I

представление числа 375 без ведущих нулей. Ячейки справа и слева от последовательности заполнены пустыми символами д. В начальный момент времени головка расположена в › Определите десятичное значение числа на ленте после выполнения программы.

2026 · 30:40 Выполнение алгоритма прогой I 8412
command =
while True:
s[i] = cmd[o]
a = cmd[2]
return ‘*.join(s)
print(int( mt('101110111'), 2))
2026 · 45:05 Выполнение алгоритма руками II

В этом фрагменте — теория или пояснение; решение показано в видео.

2026 · 52:10 Выполнение алгоритма прогой II
def mt(s):
while True:
2026 · 56:55 Выполнение алгоритма руками III

Кабанов) На ленте исполнителя MT в соседних ячейках записана последовательность из 30 единии п 45 нулей в указанном порядке. Ячейки справа п слева от последовательности заполнены пустыми символами Qo, В начальный момент времени головка расположена в ближайшей слева от последовательности ячейке. Программа для Команды движения каретки: — влево, В — вправо, М — отсутствие сдвига, $ — стоп. Определите число единиц на ленте после выполнения этой п

2026 · 1:06:55 Выполнение алгоритма прогой III

последовательность из 30 единии п 45 нулей в указанном порядке. Ячейки справа п слева от последовательности заполнены пустыми символами д. В начальный момент времени головка расположена в ближайшей слева от последовательности ячейке. Программа для Команды движения каретки: L— влево, В — вправо, № — отсутствие сдвига, $ — стоп. Определите число единии на ленте после выполнения этой программы.

while True:
a += cmd[1]
q = cta[2]
print(mt(30*'1'+45*'0').count('1'))
2026 · 1:11:30 Выполнение алгоритма руками IV
def mt(s):
while True:
a = cmd[2]
return ''.join(s)
2026 · 1:16:10 Выполнение алгоритма прогой IV

Определите десятичное значение числа на ленте после выполнения этой программы.

def mt(s):
a = cmd[2]
return ''.join(s)
print(int(mt(f'{992:b}'),2))
2026 · 1:20:45 Подбор начальной строки руками I

(№ 8428) На ленте исполнителя MT в соседних ячейках записано двоичное представление пелого положительного числа без ведущих нулей. Ячейки справа и слева от последовательности заполнены пустыми символами >. начальный момент времени головка распол последовательности ячейке. 1 озу -Сдраивнеонльвний con 2y 125) Команды движения каретки: После выполнения программы Ha л Определите десятичное значение наи 40000, которое могло быть записано на лен

def mt(s):
while True:
cmd = command[(s[il],q)]
s[i] = cele
return ''.join(s)
2026 · 1:28:15 Подбор начальной строки прогой I 8429

представление пелого положительного числа без ведущих нулей. Ячейки "справа п слева от последовательности заполнены пустыми символами 20. начальный момент времени головка расположена в ближайшей слева от последовательности ячейке. Команды движения каретки: L — влево, В — вправо, № — отсутствие сдвига, $ — стоп. После выполнения программы на ленте оказалось лвоичная запись числа Определите десятичное значение наибольшего числа, меньшего, чем 40000, которое могло быть записано на ленте до начала работы программы.

while True:
cmd = command[(s[i],q)]
if int(mt(b),2)==349:
print(x)
2026 · 1:31:30 Сумма цифр в полученной строке руками 8276

Определите сумму значений всех пифр п после выполнения программы. Карпачёв) На ленте исполнителя МТ в соседних ячейках записана. последовательность из 1000 символов, состоящей из 323 двоек, 115 нулей и 562 единии, расположенных в указанном порядке. Ячейки справа и слева от последовательности заполнены пустыми символами o>. В начальный момент времени головка расположена в ближайшей ячейке слева от последовательности.

while True:
s[i] = cmd[0]
i += cta[1]
b = f'{x:b}'
if int(mt(b),2)==349:
print(x)
2026 · 1:37:10 Сумма цифр в полученной строке прогой 8276

последовательность из 1000 символов, состоящей из 323 двоек, 115 нулей и 562 единиц, расположенных в указанном порядке. Ячейки справа п слева от последовательности заполнены пустыми символами o>. В начальный момент времени головка расположена в ближайшей ячейке слева от последовательности. Команды движения каретки: — влево, R — вправо, № — нет перемещения, $ — стоп. Определите сумму значений всех цифр последовательности, полученной после выполнения программы.

def mt(s):
if cta[1]==
i += cta[1]
print(sum(map(int,s)))
2026 · 1:41:45 Подбор начальной строки II

Карпачёв) На ленте исполнителя MT в соседних ячейках записана Е последовательность из 593 символов, состоящей пз двоск, троек и семерок, "расположенных в произвольном порядке. Ячейки справа 1 слева от последовательности заполнены пустыми символами ‹д. В начальный момент ТЕ времени головка расположена в ближайшей ячейке справа от последовательности. Команды движения каретки: 1 — влево, В — вправо, № — нет перемещения, S— стоп. Определите количество шфр 7 в последовательности, полученной после

2026 · 1:48:55 Выполнение алгоритма руками V 8279

последовательность из 593 символов, состоящей из двоек, троек и семерок, НЫ 7 227 2> + ee el "расположенных в произвольном порядке. Ячейки справа и слева OT 955 т последовательности заполнены пустыми символами А. В начальный момент времени головка расположена в ближайшей ячейке справа от 198 чарр * последовательности. Команды движения каретки: — влево, В — вправо, N — нет перемещения, $ — стоп. Определите количество цифр 7 в последовательности, полученной после

2026 · 1:56:35 Выполнение алгоритма руками VI 8299

В начальный момент времени головка расположена в ближайшей ячейке слева от последовательности Программа для исполателя: Команды движения каретки: — влево, В — вправо, № — нет перемещения, $ — стоп. Определите количество цифр 2 в последовательности, полученной после

2026 · 2:03:35 Подбор начальной строки III 8257

— (№8257) На ленте исполнителя МТ в соседних ячейках записана ——- + и + bars = ae последовательность из 1000 символов, включающая только "нули и единицы. Ячейки справа и слева от последовательности заполнены пустыми символами В начальный момент времени головка расположена в ближайшей ячейке "слева от последовательности. Команды движения каретки: L — влево, В — вправо, $ — стоп. После выполнения программы на ленте осталось ровно 515 нулей. Определите Фей @тьно „фозызжийбе-число нулей в исходной последовательности.

2026 · 2:06:55 Подбор начальной строки IV

Шубинкив) На ленте исполнителя MT в соседних ячейках ine записана последовательность из 1000 символов, включающая только нули п единицы. Ячейки справа п слева от последовательности заполнены пустыми символами д. В начальный момент времени головка расположена в "ближайшей ячейке справа от последовательности. Команды движения каретки: L- влево, R — вправо, N — нет перемешения, $ — "Определите максимально возможное число единии в исходной

2026 · 2:16:55 Подбор начальной строки V

Ha ленте в соседних ячейках записана последовательность из 255 символов, среди которых могут быть только нули и единицы. Ячейки справа и слева от последовательности заполнены пустыми символами he, В начальный момент времени головка расположена в ближайшей ячейко справа от последовательности. Программа работы исполнителя: После выполнения программы на ленте осталось ровно 125 нулей. минимально возможное число нулей в исходной последовательности.

2026 · 2:25:20 Подбор начальной строки VI

В этом фрагменте — теория или пояснение; решение показано в видео.

2026 · 2:39:05 Окончание и напутствия

В этом фрагменте — теория или пояснение; решение показано в видео.

Типичные ошибки

  • путают строки состояний и столбцы символов
  • сдвигают головку до записи символа
  • забывают, что S означает остановку после записи
  • теряют начальное состояние q0
  • не учитывают пустые символы λ за границами последовательности
  • начинают не с той стороны ленты
  • считают двоичную запись десятичной
  • теряют ведущие нули при переводе в число
  • путают количество символов и их сумму
  • не учитывают, что за один такт меняется только одна ячейка
  • ошибаются на единицу в позициях «каждый второй»
  • не проверяют конечную ленту и условие остановки

Ключевые формулы

  • команда: a, D, q
  • D ∈ {L, R, N, S}
  • L — влево, R — вправо, N — на месте, S — стоп
  • S = n1 + 2·n2 + 3·n3 + …
  • n0 + n1 + n2 + … = L
  • N = int(s, 2)

Практика

Навигатор и методические рекомендации опубликованы в 2026 году: номера заданий в них могут отличаться от нумерации 2027 года. Ориентируйтесь на тему.