Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/Property404/hdbf

Hyper-Dimensional Brainfuck
https://github.com/Property404/hdbf

brainfuck esolang esoteric-language interpreter

Last synced: about 2 months ago
JSON representation

Hyper-Dimensional Brainfuck

Awesome Lists containing this project

README

        

# Hyper-Dimensional Brainfuck

Hyper-Dimensional Brainfuck is an infinite-dimensional version of the Brainfuck programming language. Instead of a tape, we have a "world."
Lines within the world are called "vectors," and act very much like the Brainfuck tape. You can switch
between vectors using the `^` and `V` commands.

# Commands:
`+` - increment value of current cell
`-` - decrement value of current cell
`>` - shift positively along current vector
`<` - shift negatively along current vector
`^` - switch to a vector, parallel to the next dimensional axis, that passes through the current cell
`V` - switch to a vector, parallel to the previous dimension axis, that passes through the current cell
`.` - print out contents of current cell
`,` - replace contents of current cell with input from STDIN
`[` - skip past matching `]` if current cell values zero
`]` - return to matching `[`

Debug Commands (enabled with `-d`):
`#` - print out coordinates and value of current cell
`?` - print out current coordinates

# Interdimensional Travel
The `^` and `V` commands do not change the current cell, but only the direction in which the pointer will travel. Note that `^V` and `V^` is useless code, because they cancel each other out. A good way to think about this is a simple array of nodes, storing the cell's values and coordinates. For example, the list at the start of a program may be `{(0)=0}` where the cell at position `0` is equal to `0`. At the end of the program, the list may be `{(0)=5,(0,1)=2,(1,1,1)=3,(1,5)=7, ...}`

The `<` and `>` commands will actually switch to a different node in the array. For example, starting at coordinate `(0)`, `^>>>^^>>` will go to the cell at position `(0,3,0,2)`

In our notation, `(0)` is the same coordinate as `(0,0,0,0)` or `(0,0,0,0,0,0,0,0,0,0,0)`
# Example:
Let's say we're only considering a 2-dimensional plane of the world:

`[0,1][1,1]`
`[0,0][1,0]`

You start at `0,0`. To shift to `1,0`, you would use `>`. To switch to `1,1` from there, you would use `^>`. From there, to switch to `0,1`, you would just use `V<`, and to switch back to `0,0`, you use `^<`

Now let's consider a three dimensional cube, specifically a 3x3x3 cube.
To go from the bottom, left, front corner of the cube, i.e `(0,0,0)` to the top, right, back corner, i.e. `(2,2,2)` You would do the following:

`>>^>>^>>`

For a 4x4x4x4 tesseract:
`>>>^>>>^>>>^>>>`
# Install:
git clone https://github.com/Property404/hdbf
cd hdbf
make
sudo make install
# test
hdbf ./examples/LostKingdom.b

# Command Line Usage:
hdbf somefile.hdbf //Run some file
hdbf -o somefile.hdbf // Run optimized version of some file
hdbf -b somefile.hdbf // Run some file as pure brainfuck
hdbf -d somefile.hdbf // Run some file in debug mode
hdbf -di "+++++++>^^+++#" // Run command in debug mode
hdbf --help // Display help