• Петя и Вася придумали язык программирования "Мозг". В нём используются 8 ячеек памяти, и есть следующие операторы:

    Оператор Действие
    >> перейти к следующей ячейке
    << перейти к предыдущей ячейке
    ++ увеличить значение в текущей ячейке на 1
    -− уменьшить значение в текущей ячейке на 1
    [[ если значение текущей ячейки ноль, перейти вперёд по тексту программы на ячейку, следующую за соответствующей ] (с учётом вложенности)
    ]] если значение текущей ячейки не ноль, перейти назад по тексту программы на символ [ (с учётом вложенности)
    .. напечатать значение из текущей ячейки
    Исполнение программы начинается с третей ячейки. На момент запуска ячейки имеют следующие значения:

    Номер ячейки 1 2 3 4 5 6 7 8
    Значение 10 330 50 19 17 0 184 0
    Запишите число, которое выведет программа:

    [->[->+>+<<]>>[-<+<+>>]<<<]>>.[−>[−>+>+<<]>>[−<+<+>>]<<<]>>.

    Примечание: под вложенностью операторов [ и ] подразумевается однозначное соответствие оператора [ к оператору ] и наоборот по аналогии с открывающими и закрывающими скобками из математики.
    Пример: для программы [->+[-]<][−>+[−]<] первая открывающая квадратная скобка соответствует второй закрывающей квадратной скобке, а вторая открывающая квадратная скобка соответствует первой закрывающей квадратной скобке.

Ответы 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 = 2program = "[->[->+>+<<]>>[-<+<+>>]<<<]>>."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 = 0while k < len(program):    op = program[k]    if op == '.':        print(array[array_position])    elif op == '>':        array_position += 1    elif op == '<':        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
    answer img
  • Добавить свой ответ

Войти через Google

или

Забыли пароль?

У меня нет аккаунта, я хочу Зарегистрироваться

How much to ban the user?
1 hour 1 day 100 years