Brainfuck+10
Jump to navigation
Jump to search
Brainfuck+10 is a language created by User:Watermelyn. It is like Brainfuck but it has 10 more commands that may or may not be useful depending on how you are using them. Name is inspired by Brainfuck+3 because I didn't know what else to call it.
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
|
$
|
Start and end a comment, no code between 2 of these will run. |
e
|
Exit the program. |
r
|
Reset the cell under the pointer to 0 |
#
|
Output the value of the cell under the pointer |
/
|
Input an integer and set the value of the cell under the pointer to that integer |
A
|
Set the cell under the pointer to 65 (Capital A). |
a
|
Set the cell under the pointer to 97 (Lowercase a). |
Z
|
Set the cell under the pointer to 90 (Capital Z). |
z
|
Set the cell under the pointer to 122 (Lowercase z). |
5
|
Set the cell under the pointer to 53 (5). |
Examples
Hello World
A+++++++.a++++.+++++++..+++.5---------------------.Z---.z-----------.+++.------.a+++.5--------------------.
Truth Machine
/[#]#
But if you would like, normal BF code would work too. Everything from BF should also work in BF+10.
Implementations
This is my implementation, created and (not very well) tested in python.
import sys def is_integer(n): try: float(n) except ValueError: return False else: return float(n).is_integer() def run(prg: str): comment = 0 prgPos = 0 mem = [0] memPos = 0 while prgPos < len(prg): if prg[prgPos] == "$": if comment == 0: comment = 1 else: comment = 0 if comment == 0: if prg[prgPos] == ">": memPos += 1 if len(mem) <= memPos: mem.append(0) elif prg[prgPos] == "<": memPos -= 1 if memPos < 0: print("Moved off the tape! (memPos < 0)") sys.exit(0) elif prg[prgPos] == "+": mem[memPos] += 1 if mem[memPos] >= 255: mem[memPos] = 0 elif prg[prgPos] == "-": mem[memPos] -= 1 if mem[memPos] <= -1: mem[memPos] = 255 elif prg[prgPos] == ".": print(chr(mem[memPos]), end="") elif prg[prgPos] == "#": print(mem[memPos], end="") elif prg[prgPos] == ",": inp = input("Input >") if inp == "": mem[memPos] = 0 else: mem[memPos] = ord(inp[0]) elif prg[prgPos] == "/": inp = input("Input >") if is_integer(inp): if int(inp) > 255: mem[memPos] = 255 elif int(inp) < 0: mem[memPos] = 0 else: mem[memPos] = int(inp) elif prg[prgPos] == "[": if mem[memPos] == 0: countOpened = 0 prgPos+= 1 while prgPos<len(prg): if prg[prgPos] == "]" and countOpened == 0: break elif prg[prgPos] == "[": countOpened += 1 elif prg[prgPos] == "]": countOpened -= 1 prgPos += 1 elif prg[prgPos] == "]": if mem[memPos] != 0: countClosed = 0 prgPos -= 1 while prgPos >= 0: if prg[prgPos] == "[" and countClosed == 0: break elif prg[prgPos] == "]": countClosed += 1 elif prg[prgPos] == "[": countClosed -= 1 prgPos -= 1 elif prg[prgPos] == "e": sys.exit(0) elif prg[prgPos] == "r": mem[memPos] = 0 elif prg[prgPos] == "A": mem[memPos] = 65 elif prg[prgPos] == "a": mem[memPos] = 97 elif prg[prgPos] == "Z": mem[memPos] = 90 elif prg[prgPos] == "z": mem[memPos] = 122 elif prg[prgPos] == "5": mem[memPos] = 53 prgPos += 1