Петя и Вася придумали язык программирования "Мозг". В нём используются 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-ая раскрывающая квадратная скобка подходит первой накрывающей квадратной скобке.

Задать свой вопрос
1 ответ
В принципе, можно расписать, что делает эта программка (см. вложение). Так как изначально a[6] = 0, то a[3] = 50 раз к a[5] прибавится 2 * a[4] = 38, получится 38 * 50 + a[5] = 1917, потом значение a[5] будет выведено на экран.

Но проще не мучиться и просто написать программку, выполняющую этот код.

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
, оставишь ответ?
Имя:*
E-Mail:


Добро пожаловать!

Для того чтобы стать полноценным пользователем нашего портала, вам необходимо пройти регистрацию.
Зарегистрироваться
Создайте собственную учетную запить!

Пройти регистрацию
Авторизоваться
Уже зарегистрированны? А ну-ка живо авторизуйтесь!

Войти на сайт