Giter Site home page Giter Site logo

hdbf's Introduction

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

hdbf's People

Contributors

benmosher avatar property404 avatar waldyrious avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.