Hyper-Dimensional Brainfuck
Switch branches/tags
Clone or download
Property404 Merge pull request #3 from waldyrious/patch-1
README: fix typo('the' => 'they')
Latest commit 4c30541 Apr 15, 2018
Type Name Latest commit message Commit time
Failed to load latest commit information.
examples Change *.bf>=*.b Apr 1, 2018
src Up version Apr 1, 2018
.gitignore Add .travis file Apr 1, 2018
.travis.yml Add .travis file Apr 1, 2018
LICENSE Added GPL License Apr 16, 2016
Makefile Minor fixes to Polyglot.hdbf, Makefile. Alphabetized --help message Aug 9, 2016
README.md README: fix typo Apr 15, 2018


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.


+ - 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)


Let's say we're only considering a 2-dimensional plane of the world:


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:


git clone https://github.com/Property404/hdbf
cd hdbf
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