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
, но окно вывода показывает 7
ASCII символ.