На ленте в соседних ячейках записана последовательность из \(255\) символов, включающая только нули и единицы. Ячейки справа и слева от последовательности заполнены пустыми символами «\(\lambda\)». В начальный момент времени головка расположена в ближайшей ячейке справа от последовательности.
Программа работы исполнителя:
| \(\lambda\) | \(1\) | \(0\) | |
| \(q_0\) | \(\lambda , \, L, \, q_1\) | ||
| \(q_1\) | \(\lambda , \, R, \, q_2\) | \(0, \, R, \, q_2\) | \(1, \, L, \, q_1\) |
| \(q_2\) | \(\lambda , \, S, \, q_2\) | \(1, \, R, \, q_2\) | \(1, \, R, \, q_2\) |
После выполнения программы на ленте осталось ровно \(50\) нулей. Определите максимально возможное число нулей в исходной последовательности.
Решение:
Исполнитель проходит сначала ленту справа налево (в состоянии \(q_1\)) заменяя нули единицами, пока не встретит первую единицу. Эту единицу он заменяет на \(0,\) переключается в состояние \(q_2\) и движется вправо до конца ленты, заменяя все символы на \(1.\) Все \(255\) символов не могут быть нулями, потому что в конце в строке не останется ни одного нуля. Значит, хотя бы одна единица на ленте присутствует. Действительно, строка $$\lambda \underbrace{00 \ldots 00}_{49} 1 \underbrace{00 \ldots 00}_{205} \lambda$$ решает нашу задачу. Проверим это программно:
Python
com = {'l': {'q0': 'l,L,q1', 'q1': 'l,R,q2', 'q2': 'l,S,q2'},
'1': {'q1': '0,R,q2', 'q2': '1,R,q2'},
'0': {'q1': '1,L,q1', 'q2': '1,R,q2'}}
step = {'L': -1, 'R': 1, 'S': 0}
#s = ['l'] + ['0'] * 250 + ['l']
s = ['l'] + ['0'] * 49 + ['1'] + ['0'] * 205 + ['l']
print('Нулей в исходной строке', s.count('0'))
p = len(s) - 1
state = 'q0'
ch, act, st = com[s[p]][state].split(',')
s[p] = ch
state = st
p += step[act]
while act != 'S':
ch, act, st = com[s[p]][state].split(',')
s[p] = ch
state = st
p += step[act]
print('Нулей в конечной строке', s.count('0'))
Ответ: \(254\)
Эффективно готовьтесь к ЕГЭ по информатике с новым тренажёром, эмулирующем работу станции КЕГЭ, которая используется на реальном экзамене