(В. Шубинкин) На ленте исполнителя МТ в соседних ячейках записана последовательность из \(1000\) символов, включающих только нули и единицы. Известно, что в этой последовательности \(985\) единиц. Ячейки справа и слева от последовательности заполнены пустыми символами «\(\lambda\)». В начальный момент времени головка находится на неизвестном ненулевом расстоянии справа от последовательности.
Программа работы исполнителя:
| \(\lambda\) | \(0\) | \(1\) | |
| \(q_0\) | \(\lambda , \, L, \, q_0\) | \(1 , \, L, \, q_0\) | \(\lambda , \, L, \, q_1\) |
| \(q_1\) | \(\lambda , \, R, \, q_2\) | \(1, \, L, \, q_0\) | \(\lambda, \, L, \, q_1\) |
| \(q_2\) | \(1 , \, S, \, q_0\) | \(1, \, S, \, q_0\) | \(1, \, S, \, q_1\) |
Команды движения каретки: \(L\) – влево, \(R\) – вправо, \(N\) — нет перемещения, \(S\) – стоп. Все полученные после выполнения программы непрерывные последовательности из нолей и единиц рассматриваются как двоичные числа. Определите, какое наибольшее число могло получиться. В ответе запишите это число в десятичной системе счисления.
Решение:
Исполнитель может закончить работу только в состоянии \(q_2.\) А попасть в него он может только находясь в состоянии \(q_1\) при считывании пустого символа. Это возможно только после прохождения справа налево всех непустых символов. Кроме того самый левый непустой символ не может быть нулём, иначе программа уйдёт в бесконечный цикл. Наконец, чтобы получить максимальное число, все \(15\) нулей должны идти подряд. В итоге получим строку из \(16\) подряд идущих единиц, а \(1111111111111111_2 = 65535_{10}.\)
Тест на программе
Python
mt = {'l': {'q0': 'l,L,q0', 'q1': 'l,R,q2', 'q2': '1,S,q0'},
'0': {'q0': '1,L,q0', 'q1': '1,L,q0', 'q2': '1,S,q0'},
'1': {'q0': 'l,L,q1', 'q1': 'l,L,q1', 'q2': '1,S,q1'}}
step = {'L': 1, 'R': -1, 'S': 0, 'N': 0}
state = 'q0'
s = ['l'] * 10 + ['1'] + ['0'] * 15 + ['1'] * 984 + ['l'] * 10
p = len(s) - 1
s[p], m, state = mt[s[p]][state].split(',')
while m != 'S':
p -= step[m]
s[p], m, state = mt[s[p]][state].split(',')
print(int(''.join(x for x in s if x != 'l'), 2))
Ответ: \(65535\)
Эффективно готовьтесь к ЕГЭ по информатике с новым тренажёром, эмулирующем работу станции КЕГЭ, которая используется на реальном экзамене