Brainf*ck входная интерпретация

Я пишу интерпретатор Brainfuck на Python и сейчас тестирую этот код:

,>++++++[<-------->-],[<+>-]<.

с этим входом:

43

Польская Википедия сказала, что результат должен быть 7, но что-то здесь не так. Как мне относиться к вводу? Как 4 и 3 или как: "4" и "3" (52 и 51)? Если я рассматриваю входные символы как целые числа, то результат равен -41, потому что после первого цикла [0] равен -44 и [1] равен 0, тогда [1] становится 3, и мы добавляем это значение 3 к -44, так что это приводит к -41,

С другой стороны, если я трактую входные символы как коды ASCII, то после первого цикла [0] равно 4 и [1] равно 0, тогда [1] становится 51, и мы добавляем 51 к 4, так что это приводит к 55. (это Интерпретатор JavaScript также дает результат 55: https://www.nayuki.io/page/brainfuck-interpreter-javascript)

Тем не менее, я скачал некоторый интерпретатор, написанный на C, и он дает результат 7, такой же, как в Википедии... так что я запутался. Вот этот интерпретатор: http://pastebin.com/aasxLppa, и этот интерпретатор дает результат 7: brainfuck.tk -.-

1 ответ

Решение

Входы 4 а также 3в байтах. Ввод принимается как символы ASCII, значения, таким образом, 52 и 51.

  • Первый вход уменьшается в 8, 6 раз, поэтому 52 - 48 = 4.

  • Второй вход добавляется к первому входу, поэтому 4 плюс 51 = 55.

  • 55 выводится на выход, и это ASCII 7,

Программа суммирует две цифры ASCII.

Интерпретатор JavaScript полностью корректен. Вы искали первый регистр, который содержит значение байта 55, но окно вывода показывает 7ASCII символ.

Другие вопросы по тегам