Задание 12 ЕГЭ по информатике — Машина Тьюринга: трассировка ленты
Разбор номера «Машина Тьюринга: трассировка ленты»: как устроено задание, настоящие формулировки из тренажёра с подсказками и официальным решением. Окно практики открывается сразу — без регистрации и онбординга.
Задание 12 (№12 — Машина Тьюринга: трассировка ленты) — вопрос первой части экзамена по информатике: короткий ответ, который проверяется автоматически. Ниже — реальные формулировки из тренажёра с подсказками и разбором; проверка работает прямо на этой странице.
Окно примера ниже — то же, что на сайте: подсказки по одной, автопроверка ответа и разбор.
Примеры задания 12
№ 12Пример 1краткий ответ★★★★★1 первичный балл
Исполнитель Редактор получает на вход строку цифр и преобразует её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки цифр. А) заменить (v, w). Эта команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Например, выполнение команды заменить (111, 27) преобразует строку 05111150 в строку 0527150. Если в строке нет вхождений цепочки v, то выполнение команды заменить (v, w) не меняет эту строку. Б) нашлось (v). Эта команда проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь». Строка исполнителя при этом не изменяется. Цикл ПОКА условие последовательность команд КОНЕЦ ПОКА выполняется, пока условие истинно. В конструкции ЕСЛИ условие ТО команда1 ИНАЧЕ команда2 КОНЕЦ ЕСЛИ выполняется команда1 (если условие истинно) или команда2 (если условие ложно) Определите сумму цифр в строке, получившейся в результате применения приведённой ниже программы к входной строке, состоящей из одной двойки, за которой следуют 110 цифр 3 подряд. НАЧАЛО ПОКА нашлось (2) ЕСЛИ нашлось (23) ТО заменить (23, 332) …
Подсказка 1. Выпиши начальную строку и все команды замены: что меняется на что и в каком порядке они выполняются.
Подсказка 2. Применяй замены по одной к первому слева вхождению, повторяя цикл, пока в строке есть нужная цепочка и не сработала проверка на отсутствие.
Подсказка 3. Прогони те же шаги в Python (replace со счётчиком одного замен): иначе легко сделать лишнюю замену и сдвинуть ответ.
Разбор.
Решение. Приведём решение на языке Python. s = '2' + '3' * 110 while ('2' in s): if ('23' in s): s = s.replace('23', '332', 1) else: s = s.replace('2', '33', 1) print(s.count('2')*2 + s.count('3')*3)
Ответ.
666
№ 12Пример 2краткий ответ★★★★★1 первичный балл
Исполнитель Редактор получает на вход строку цифр и преобразует её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки цифр. А) заменить (v, w). Эта команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Например, выполнение команды заменить (111, 27) преобразует строку 05111150 в строку 0527150. Если в строке нет вхождений цепочки v, то выполнение команды заменить (v, w) не меняет эту строку. Б) нашлось (v). Эта команда проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь». Строка исполнителя при этом не изменяется. Дана программа для редактора: НАЧАЛО ПОКА НЕ нашлось (00) заменить (02, 101) заменить (11, 2) заменить (12, 21) заменить (010, 00) КОНЕЦ ПОКА КОНЕЦ Известно, что исходная строка A содержала ровно два нуля — на первом и на последнем месте, а также поровну единиц и двоек, при этом всего в строке A было более 200 цифр. После выполнения данной программы получилась строка B, сумма цифр которой оказалась простым числом. Какое наименьшее количество единиц могло быть в строке A?
Подсказка 1. Выпиши начальную строку и все команды замены: что меняется на что и в каком порядке они выполняются.
Подсказка 2. Применяй замены по одной к первому слева вхождению, повторяя цикл, пока в строке есть нужная цепочка и не сработала проверка на отсутствие.
Подсказка 3. Прогони те же шаги в Python (replace со счётчиком одного замен): иначе легко сделать лишнюю замену и сдвинуть ответ.
Разбор.
Решение. Заметим, что сумма цифр исходной строки будет на единицу больше суммы цифр полученной строки. Приведём решение данной задачи на языке Python. def is_prime(x): for i in range(2, (x//2)+1): if x % i == 0: return False return True for i in range(100, 200): r = i * 1 + i * 2 - 1 if is_prime(r): print(i) break Ответ: 104. Приведём решение Ильи Андрианова на языке Python. def prime(x): if x == 1: return False for j in range(2, x//2 + 1): if x % j == 0: return False return True for n in range(100, 200): s = '0' + '1' * n + '2' * n + '0' while '00' not in s: s = s.replace('02', '101', 1) s = s.replace('11', '2', 1) s = s.replace('12', '21', 1) s = s.replace('010', '00', 1) summa = sum([int(x) for x in s if x.isdigit()]) if prime(summa): print(n) exit()
Ответ.
104
Как устроена практика в тренажёре
Опыт за каждое решение
Чистое решение без подсказок ценится выше: опыт, уровни и серии растут с каждым заданием, а не за клики.
Ошибки не пропадают
Нерешённое возвращается в работу над ошибками — тренажёр приведёт к заданию снова, пока оно не закроется без помощи.
Прогноз балла
После нескольких решённых номеров тренажёр показывает прогнозный балл и говорит, какие темы подтянуть, чтобы его поднять.
Закрепи задание 12 в тренажёре
Окно практики откроется сразу — без имени и онбординга. Прогресс сохранится, как только укажешь имя.