Brainfuck extended
Jump to navigation
Jump to search
Paradigm(s) | imperative |
---|---|
Designed by | User:None1 |
Appeared in | 2023 |
Memory system | Cell-based |
Dimensions | one-dimensional |
Computational class | Turing complete |
Reference implementation | Interpreter in Python |
Influenced by | brainfuck |
File extension(s) | .bx |
Brainfuck extended is extended Brainfuck, which can do complicated stuff easier than Brainfuck, developed by User:None1.
You can call it Bx for short.
Memory Model
Brainfuck stores its memory in a tape, so does Bx. But Bx also has a 8 bit register (which is 0 initially), which means it is more powerful.
Commands
There are 8 commands in Brainfuck, but Bx had much more.
Standard Commands
Standard commands are derived from brainfuck.
But in Bx, the + and - commands are replaced with / and \, because + and - have other uses.
Register Commands
Commands that access the register.
@ Rewrites the register with the pointer value. % Rewrites the pointer with the register value. ~ Swaps the pointer value with the register value. + Add the register and the pointer, and store the result into the register (modulo 256). - Subtracts the register by the pointer, and store the result into the register (modulo 256). * Multiplies the register and the pointer, and store the result into the register. (Modulo 256) | Compares the register value with the pointer value, if the register value is greater than the pointer value, store 1 into the register, otherwise 0. & Bitwise and the register value and the pointer value, and store it into the register. ^ Bitwise or the register value and pointer value, and store it into the register. ! Bitwise not the register value. ; Rewrites the register with a random integer from 0 to the register value before. The random generator can either be a psuedo random generator or a real random generator.
Other Commands
A command that is neither a standard command nor a register command belongs to the 'Other Command' group.
( Reads a decimal integer (unsigned) from standard input, and stores it into the pointer (modulo 256). ) Writes the pointer value to standard output as an unsigned decimal integer. { Reads a hexadecimal integer (unsigned) from standard input, and stores it into the pointer (modulo 256). } Writes the pointer value to standard output as an unsigned uppercase hexadecimal integer. Reads a hexadecimal integer (unsigned) from standard input, and stores it into the pointer (modulo 256). If the hexadecimal integer has less than 2 digits, it is padded to 2 digits (e.g.: 15 prints 0F). _ Followed by exactly 2 hexadecimal digits (either uppercase or lowercase), rewrites the pointer with the value represented by these digits. ?<code>:<code>' Conditional operator, if the pointer value is not zero, then run the code between ? and : , otherwise run the code between : and '. The ' IS mandatory. $<string>$ Treats the string as a C-style string, and rewites the tape with it, starting from the pointer. Each $ matches the nearest $ after it. This command only changes the N+1 consecutive cells starting from the pointer, where N is the length of the string. And it doesn't change the pointer. # Comment, each # matches the nearest # after it, just like that each /* matches the nearest */ in C++.
Example Programs
Hello World
_48._65._6c.._6f._20._57._6f._72._6c._64._21.
Cat Program
/[,.]
Random Integer Between 1 and 6
_05~;/~)
An easier way to print Hello World
$Hello World!$[.>]
A+B Problem
(@(+%)
Truth Machine (Characters that are not 0 are treated as 1)
_30~,~-~?_31[.]:_30.'
Randomly choose a number from two numbers read from user input
(>>(</~;~[>>]<)
Turing Complete?
This language is certainly turing complete, because Brainfuck is, and this language is a superset of Brainfuck.