На ленте в соседних ячейках записано двоичное представление целого положительного числа без ведущих нулей. Ячейки справа и слева от последовательности заполнены пустыми символами «\(\lambda\)». В начальный момент времени головка расположена в ближайшей слева от последовательности ячейке.
Программа работы исполнителя:
| \(\lambda\) | \(0\) | \(1\) | |
| \(q_0\) | \(\lambda , \, R, \, q_1\) | ||
| \(q_1\) | \(0, \, L, \, q_2\) | \(0, \, R, \, q_1\) | \(1, \, R, \, q_1\) |
| \(q_2\) | \(1, \, L, \, q_3\) | \(1, \, L, \, q_2\) | \(1, \, L, \, q_2\) |
| \(q_3\) | \(0, \, L, \, q_4\) | ||
| \(q_4\) | \(1, \, S, \, q_4\) |
Определите наибольшее число, не превышающее \(903,\) которое может получиться на ленте в результате работы программы.
В ответе запишите получившееся на ленте число в десятичной системе счисления.
Решение:
Python
prog = {('q0', 'l'): 'l,R,q1',
('q1', 'l'): '0,L,q2', ('q1', '0'): '0,R,q1', ('q1', '1'): '1,R,q1',
('q2', 'l'): '1,L,q3', ('q2', '0'): '1,L,q2', ('q2', '1'): '1,L,q2',
('q3', 'l'): '0,L,q4',
('q4', 'l'): '1,S,q4',}
move = {'L': -1, 'R': 1, 'S': 0}
mn = 0
for n in range(1, 1500):
s = ['l'] * 5 + list(f'{n:b}') + ['l'] * 3
state, act, pos = 'q0', 'R', 4
# print(s)
while act != 'S':
com = prog[(state, s[pos])]
r, act, state = com.split(',')
s[pos] = r
pos += move[act]
# print(s)
digs = [x for x in s if x != 'l']
num = int(''.join(digs), 2)
if mn < num <= 903:
mn = num
print(mn)
Ответ: \(766\)
Эффективно готовьтесь к ЕГЭ по информатике с новым тренажёром, эмулирующем работу станции КЕГЭ, которая используется на реальном экзамене