Brainfuck Python interpreter (ChatGPT)
Jump to navigation
Jump to search
Here is a Brainfuck interpreter in Python. Edited from the Numberfuck interpreter which was coded by ChatGPT. Still is optimized for everything, including printing the full lyrics of the song Never Gonna Give You Up.
def interpret():
code = input("Enter Brainfuck code: ")
memory = [0] * 30000
pointer = 0
output_string = ""
code_length = len(code)
code_pointer = 0
loop_stack = []
commands = {
'>': lambda: nonlocal_pointer('+'),
'<': lambda: nonlocal_pointer('-'),
'+': lambda: increment_memory(),
'-': lambda: decrement_memory(),
'.': lambda: output_to_string(),
',': lambda: take_input(),
'[': lambda: start_loop(),
']': lambda: end_loop()
}
def nonlocal_pointer(op):
nonlocal pointer
if op == '+':
pointer += 1
else:
pointer -= 1
def increment_memory():
nonlocal memory, pointer
memory[pointer] = (memory[pointer] + 1) % 256
def decrement_memory():
nonlocal memory, pointer
memory[pointer] = (memory[pointer] - 1) % 256
def output_to_string():
nonlocal memory, pointer, output_string
output_string += chr(memory[pointer])
def take_input():
nonlocal memory, pointer
user_input = input("Enter input (1 character): ")
memory[pointer] = ord(user_input[0])
def start_loop():
nonlocal memory, pointer, code_pointer, loop_stack
if memory[pointer] == 0:
count = 1
while count != 0 and code_pointer < code_length - 1:
code_pointer += 1
if code[code_pointer] == '[':
count += 1
elif code[code_pointer] == ']':
count -= 1
else:
loop_stack.append(code_pointer)
def end_loop():
nonlocal code_pointer, loop_stack
if memory[pointer] != 0:
code_pointer = loop_stack[-1]
else:
loop_stack.pop()
while code_pointer < code_length:
command = code[code_pointer]
if command in commands:
commands[command]()
code_pointer += 1
print("Output:", output_string)
interpret()