(В. Шубинкин) На ленте исполнителя МТ в соседних ячейках записана последовательность символов \(2 \ldots 2 0 \ldots 01 \ldots 1:\) сначала \(120\) двоек, затем \(333\) ноля и \(750\) единиц. Ячейки справа и слева от последовательности заполнены пустыми символами «\(\lambda\)». В начальный момент времени головка находится на неизвестном ненулевом расстоянии слева от последовательности.
Программа работы исполнителя:
| \(\lambda\) | \(0\) | \(1\) | \(2\) | |
| \(q_0\) | \(\lambda , \, R, \, q_0\) | \(0 , \, R, \, q_0\) | \(0 , \, R, \, q_1\) | \(0 , \, R, \, q_2\) |
| \(q_1\) | \(1 , \, S, \, q_0\) | \(1 , \, L, \, q_0\) | \(1 , \, R, \, q_1\) | \(1 , \, R, \, q_2\) |
| \(q_2\) | \(\lambda , \, N, \, q_1\) | \(2 , \, L, \, q_0\) | \(2 , \, L, \, q_1\) | \(2 , \, R, \, q_2\) |
Команды движения каретки: \(L\) – влево, \(R\) – вправо, \(N\) — нет перемещения, \(S\) – стоп. Определите количество ячеек, значения которых после выполнения программы не равны исходным.
Решение:
Так как исходная строка заранее известна, то решить задачу можно программно, просто исполнив алгоритм:
Python
mt = {'l': {'q0': 'l,R,q0', 'q1': '1,S,q0', 'q2': 'l,N,q1'},
'0': {'q0': '0,R,q0', 'q1': '1,L,q0', 'q2': '2,L,q0'},
'1': {'q0': '0,R,q1', 'q1': '1,R,q1', 'q2': '2,L,q1'},
'2': {'q0': '0,R,q2', 'q1': '1,R,q2', 'q2': '2,R,q2'}}
step = {'L': -1, 'R': 1, 'S': 0, 'N': 0}
state = 'q0'
orig = 'l' * 10 + '2' * 120 + '0' * 333 + '1' * 750 + 'l' * 10
s = list(orig)
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(sum(x != y for x, y in zip(s, orig)))
Ответ: \(5\)
Эффективно готовьтесь к ЕГЭ по информатике с новым тренажёром, эмулирующем работу станции КЕГЭ, которая используется на реальном экзамене