К содержанию

Задание 12 · Исполнение алгоритма для исполнителя

Практика и итог

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

Одна задача — вся тема

Задача темы — наибольшее число нулей во входе из 12 цифр, если после работы машины осталось ровно 5 нулей, — решается приёмами подтем по очереди. Пролистай решение: в подписи каждого шага — подтема, откуда приём.

  1. Подтема 1. Учимся на слове 10100: головка в пустой ячейке справа, состояние q0. Такт — запись, сдвиг, новое состояние.
  2. Подтемы 2 и 3. Таблица задачи темы идёт справа налево до первой единицы: нули хвоста становятся единицами, единица — нулём. 20 → 19: минус один.
  3. Подтема 4. Обратно: в результате 5 нулей — 4 в части P и новый. Больше всего нулей у входа 0000 1 0000000: 4 + 7 = 11. Ответ задачи темы — 11.

Машину не прогоняли по всей ленте: хватило нескольких тактов, чтобы понять смысл таблицы — «минус один», — а дальше ответ получился рассуждением. Подтемы 5 и 6 разбирают таблицы с фазами и ограничения на сумму цифр.

Карта темы

Каждая подтема дала один способ понять таблицу, и любое решение собирается из них. Сверху — путь от таблицы к ответу, ниже — по блоку на подтему. Заголовок блока ведёт на подтему.

  1. Тактызапись, сдвиг, новое состояние
  2. Смыслчто таблица делает с любой строкой
  3. Ответчисло, слово, количество или граница

1Лента, команда и такт

  • λ, L, q1записать → сдвинуться → сменить состояние
  • Sзапись и остановка; такт считается
  • λпустая ячейка — свой столбец, не ноль

2Однократный проход и количества

  • заменакаждая ячейка меняется сама по себе
  • количестваиз результата обратно во вход
  • два символа в одинвыбор — для наименьшего и наибольшего

3Двоичное число на ленте

  • 20 → 19таблица задачи темы: минус один
  • N + 2ᵏединица дописана слева
  • 2N + 1единица дописана справа
  • 2ᵏ − 1 − Nинверсия всех цифр

4Хвост и обратная задача

  • P 1 0ᵗ → P 0 1ᵗменяется только хвост
  • обратный вопросот результата к входу, пример на границе

5Состояния и фазы

  • фазачто делает и чем заканчивается
  • тактысумма по фазам, например 2k + 4

6Сумма, простота и ограничениядополнительный урок

  • S = 7a + 8b + 3cсумма через количества цифр
  • простоебольше 1, делители до √x
Карта темы: путь к ответу сверху и главное из каждой подтемы. Номер блока — номер подтемы.

Как решать

Любое задание 12 решается одним порядком из пяти шагов. Каждому шагу ты уже учился — под ним номера подтем:

Главный шаг — смысл таблицы: замена, арифметика, хвост или фазы. Если короткая трасса не сошлась с ним, пересматривают смысл, а не прогоняют машину по всей ленте.

Для обратного вопроса ответ подтверждают входом, на котором достигается граница: в задаче темы это 0000 1 0000000.

Частые ошибки

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

запись при S
при S запись пропустили → сначала запись, потом остановка. Спроси себя: что команда пишет в ячейку при S?подтема 1
запись после сдвига
символ записали в новую ячейку → запись — в текущую, потом сдвиг. Спроси себя: где стояла головка, когда читали символ?подтема 1
начальная ячейка
головка начала на последней цифре → в пустой ячейке справа. Спроси себя: где головка по условию?подтема 1
λ — ноль
пустой символ λ прочитали как 0 → λ — свой столбец таблицы. Спроси себя: какой столбец таблицы я читаю?подтема 1
q0 — стоп
состояние q0 приняли за остановку → остановку задаёт только S. Спроси себя: есть ли в команде S?подтема 1
слово и число
длину взяли по числу без ведущих нулей → ведущие нули — тоже ячейки слова. Спроси себя: сколько ячеек занимает слово?подтема 3
выборка вместо границы
максимум взяли из нескольких запусков → граница рассуждением и пример на ней. Спроси себя: почему больше быть не может?подтема 4
не та величина
записали результат, а спрашивали такты → ответ — то, что спрашивают. Спроси себя: число, слово, такты или вход?подтема 5

Итог

Тема пройдена: задача темы решена от первых тактов до ответа 11. Вот что взять с собой.

  • ПорядокТакты, смысл, вопрос, граница, проверка.
  • ТактЗапись в текущую ячейку, сдвиг, новое состояние.
  • СмыслЗамена, ±1 и цифры на краях, хвост или фазы.
  • ГраницаРассуждение и вход, на котором она достигается.
  • Задача темы0000 1 0000000: 4 + 7 = 11 нулей.

Проверьте себя

Ответь сначала сам, потом открой ответ.

Вопрос 1

Что таблица задачи темы сделает со словом 10111000?

ОтветСкрыть ответ
Ответ

10110111: хвост из трёх нулей станет единицами, единица перед ним — нулём. Это 184 − 1 = 183.

Вопрос 2

Сколько тактов таблица задачи темы делает на слове с хвостом из t нулей?

ОтветСкрыть ответ
Ответ

t + 2: вход в строку, t нулей хвоста и остановочная замена единицы.

Вопрос 3

Почему в задаче темы во входе не может быть 12 нулей?

ОтветСкрыть ответ
Ответ

Без единицы машине нечего вычесть: ей нужна остановочная единица. Значит, нулей не больше 11.

Вопрос 4

Таблица дописывает единицу справа от двоичного числа N. Какое число получится?

ОтветСкрыть ответ
Ответ

2N + 1: сдвиг на разряд и единица.

Практика

Для проверки ответов нужен JavaScript. Условия, подсказки и решения доступны ниже.

Программа на числе 45

На ленте записано двоичное представление числа 45 без ведущих нулей. Головка в ближайшей справа от последовательности ячейке. Программа:

Состояниеλ01
q0λ, L, q1——
q1λ, S, q11, L, q10, L, q1

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

Введите число.

Такты на числе 95

На ленте записано двоичное представление числа 95 без ведущих нулей. Головка в ближайшей справа от последовательности ячейке. Программа:

Состояниеλ01
q0λ, L, q1——
q11, S, q11, S, q10, L, q1

Сколько тактов выполнит исполнитель, включая такт с остановкой?

Введите число.

Двойки исходной строки

На ленте записана строка из цифр 0, 1, 2. Головка в ближайшей справа от строки ячейке. Программа:

Состояниеλ012
q0λ, L, q1———
q1λ, S, q11, L, q12, L, q10, L, q1

После выполнения в строке пять нулей, три единицы и две двойки. Сколько двоек было в исходной строке?

Введите число.

Наибольшее число нулей

На ленте записана строка длины 15 из нулей и единиц (начальные нули допускаются). Головка в ближайшей справа от строки ячейке. Программа:

Состояниеλ01
q0λ, L, q1——
q1λ, S, q11, L, q10, S, q1

После выполнения в строке ровно шесть нулей. Какое наибольшее количество нулей могло быть в исходной строке?

Введите число.

Программа на числе 100

На ленте записано двоичное представление числа 100 без ведущих нулей. Головка в ближайшей слева от последовательности ячейке. Программа:

Состояниеλ01
q0λ, R, q1——
q10, L, q20, R, q11, R, q1
q21, S, q20, L, q21, L, q2

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

Введите число.