Brainfuck+3
Jump to navigation
Jump to search
Brainfuck+3 is like brainfuck but it has a bidimensional space and it has 3 more commands.
Commands
Command | Description |
---|---|
>
|
Move the pointer to the right |
<
|
Move the pointer to the left |
+
|
Increment the memory cell under the pointer |
-
|
Decrement the memory cell under the pointer |
.
|
Output the character signified by the cell at the pointer |
,
|
Input a character and store it in the cell at the pointer |
[
|
Jump past the matching ] if the cell under the pointer is 0
|
]
|
Jump back to the matching [ if the cell under the pointer is nonzero
|
^
|
Move the pointer up |
v
|
Move the pointer down |
x
|
Exit program. |
Examples
This code will print "Hello World". It is based on the code from the Brainfuck page, but left is replaced with up and right is replaced with down.
++++++++[^++++[^++^+++^+++^+vvvv-]^+^+^-^^+[v]v-]^^.^---.+++++++..+++.^^.v-.v.+++.------.--------.^^+.
The normal Brainfuck code will also work.
Implementations
This is one implementation, done in Python.
def run_bfp3(code: str) -> None: pointer = 0 # for instructions row = 0 # for up and down tape column = 0 # for left and right tape tape = [[0]] input_string = chr(10) # allows multiple inputs easily # checks balance balance = 0 for char in code: if char == '[': balance += 1 elif char == ']': balance -= 1 assert balance >= 0, 'unmatched ]' assert balance == 0, 'unmatched [' while pointer < len(code): if code[pointer] == '>': column += 1 if column == len(tape[row]): for row_number in range(len(tape)): tape[row_number].append(0) elif code[pointer] == '<': column -= 1 if column < 0: for row_number in range(len(tape)): tape[row_number] = [0] + tape[row_number] column += 1 elif code[pointer] == 'v': row += 1 if row == len(tape): tape.append([0]*(column+1)) elif code[pointer] == '^': row -= 1 if row < 0: tape = [[0]*(column+1)] + tape row += 1 elif code[pointer] == '+': tape[row][column] = (tape[row][column] + 1) % 256 elif code[pointer] == '-': tape[row][column] = (tape[row][column] - 1) % 256 elif code[pointer] == '.': print(chr(tape[row][column]),end='') elif code[pointer] == ',': if input_string == chr(10): input_string = input(">>") + chr(10) if len(input_string) > 0 and ord(input_string[0]) != chr(10): tape[row][column] = ord(input_string[0]) input_string = input_string[1:] elif code[pointer] == '[': if tape[row][column] == 0: nest_counter = 0 while code[pointer] != ']' or nest_counter >= 0: pointer += 1 if code[pointer] == '[': nest_counter += 1 elif code[pointer] == ']': nest_counter -= 1 elif code[pointer] == ']': if tape[row][column] != 0: nest_counter = 0 while code[pointer] != '[' or nest_counter >= 0: pointer -= 1 if code[pointer] == ']': nest_counter += 1 elif code[pointer] == '[': nest_counter -= 1 elif code[pointer] == 'x': break pointer += 1