(И. Карпачёв) На ленте исполнителя МТ в соседних ячейках записана последовательность из \(1000\) символов, включающая \(155\) нулей, \(237\) единиц, \(128\) двоек и \(480\) троек, расположенных в произвольном порядке. Ячейки справа и слева от последовательности заполнены пустыми символами «\(\lambda\)». В начальный момент времени головка находится в ближайшей ячейке справа от последовательности.
Программа работы исполнителя:
| \(\lambda\) | \(0\) | \(1\) | \(2\) | \(3\) | |
| \(q_0\) | \(\lambda , \, R, \, q_1\) | ||||
| \(q_1\) | \(\lambda , \, L, \, q_2\) | \(1, \, R, \, q_1\) | \(2, \, R, \, q_1\) | \(1, \, R, \, q_1\) | \(2, \, R, \, q_1\) |
| \(q_2\) | \(\lambda , \, R, \, q_1\) | \(2, \, L, \, q_2\) | \(1, \, L, \, q_2\) |
Команды движения каретки: \(L\) – влево, \(R\) – вправо, \(N\) — нет перемещения, \(S\) – стоп. Определите количество цифр \(2\) в последовательности, полученной после выполнения программы.
Решение:
Python
mt = {'l': {'q0': 'l,R,q1', 'q1': 'l,L,q2', 'q2': 'l,S,q2'},
'0': {'q1': '1,R,q1'},
'1': {'q1': '2,R,q1', 'q2': '2,L,q2'},
'2': {'q1': '1,R,q1', 'q2': '1,L,q2'},
'3': {'q1': '2,R,q1'}}
step = {'R': 1, 'L': -1, 'S': 0, 'N': 0}
state = 'q0'
s = list('l' + '0' * 155 + '1' * 237 + '2' * 128 + '3' * 480 + 'l')
p = 0
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(f'Количество двоек в конечной последовательности: {s.count("2")}')
Ответ: \(283\)
Эффективно готовьтесь к ЕГЭ по информатике с новым тренажёром, эмулирующем работу станции КЕГЭ, которая используется на реальном экзамене