Петя и Вася придумали язык программирования "Мозг". В нём используются 8
Петя и Вася придумали язык программирования "Мозг". В нём употребляются 8 ячеек памяти, и есть последующие операторы:
Оператор Деянье
gt;gt; перейти к последующей ячейке
lt;lt; перейти к предшествующей ячейке
++ увеличить значение в текущей ячейке на 1
- уменьшить значение в текущей ячейке на 1
[[ если значение текущей ячейки ноль, перейти вперёд по тексту программы на ячейку, последующую за подходящей ] (с учётом вложенности)
]] если значение текущей ячейки не ноль, перейти назад по тексту программки на знак [ (с учётом вложенности)
.. напечатать значение из текущей ячейки
Выполнение программки начинается с третей ячейки. На момент пуска ячейки имеют последующие значения:
Номер ячейки 1 2 3 4 5 6 7 8
Значение 10 330 50 19 17 0 184 0
Запишите число, которое выведет программка:
[-gt;[-gt;+gt;+lt;lt;]gt;gt;[-lt;+lt;+gt;gt;]lt;lt;lt;]gt;gt;.[gt;[gt;+gt;+lt;lt;]gt;gt;[lt;+lt;+gt;gt;]lt;lt;lt;]gt;gt;.
Примечание: под вложенностью операторов [ и ] подразумевается однозначное соответствие оператора [ к оператору ] и наоборот по аналогии с открывающими и покрывающими скобками из арифметики.
Пример: для программки [-gt;+[-]lt;][gt;+[]lt;] 1-ая раскрывающая квадратная скобка подходит 2-ой покрывающей квадратной скобке, а 2-ая раскрывающая квадратная скобка подходит первой накрывающей квадратной скобке.
Но проще не мучиться и просто написать программку, выполняющую этот код.
python 3.
array = [10, 330, 50, 19, 17, 0, 184, 0]
array_position = 2
program = "[-gt;[-gt;+gt;+lt;lt;]gt;gt;[-lt;+lt;+gt;gt;]lt;lt;lt;]gt;gt;."
stack = []
transitions = [None] * len(program)
for k, op in enumerate(program):
if op == '[':
stack.append(k)
elif op == ']':
v = stack.pop()
transitions[k] = v + 1
transitions[v] = k + 1
k = 0
while k lt; len(program):
op = program[k]
if op == '.':
print(array[array_position])
elif op == 'gt;':
array_position += 1
elif op == 'lt;':
array_position -= 1
elif op == '[' and array[array_position] == 0:
k = transitions[k]
continue
elif op == ']' and array[array_position] != 0:
k = transitions[k]
continue
elif op == '+':
array[array_position] += 1
elif op == '-':
array[array_position] -= 1
k += 1
-
Вопросы ответы
Статьи
Информатика
Статьи
Математика.
Физика.
Математика.
Разные вопросы.
Разные вопросы.
Математика.
Разные вопросы.
Математика.
Физика.
Геометрия.