BIO

From Esolang
Jump to: navigation, search

BIO (Binary IO) is an esoteric programming language designed by Emil Svensson (User:fr34k) in 2008. BIO was inspired by ABCDXYZ by ais523

Overview

BIO works using 3 memory blocks (known as x, y and z). Each of the blocks are at start set to 0. BIO understands two letters (I and O) and two numbers (1 and 0), which combined, creates various commands. Due to the limited amount of memory blocks, one must use a function for resetting the blocks in order to continue with his or her calculations etc.

Commands

The language is not case-sensitive, meaning that a command can look like this: 1O or this; 1o

  0 1
O Increment the specified block Decrement the specified block
I While the block is not 0 Output the block

Note that the command 0i, is built up like this: 0i{ do something }; Every command is ended by a ';'.

Examples

Hello, world!

0ox;                   //Increment the block x by 1 9 times
0ox;
0ox;
0ox;
0ox;
0ox;
0ox;
0ox;
0ox;
0ix{                   //While block x is not 0
  0oy;                 //Increment the block y by 1 8 times
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  1ox;                 //Decrement block x by 1
};
1iy;                   //Output block y (H)
0iy{                   //Reset block y to 0
  1oy;
};
0ox;
0ox;
0ox;
0ox;
0ox;
0ox;
0ox;
0ox;
0ox;
0ox;
0ix{
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  1ox;
};
0oy;
1iy;                   //Output block y (e)
0iy{
  1oy;
};
0ox;
0ox;
0ox;
0ox;
0ox;
0ox;
0ox;
0ox;
0ox;
0ix{
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  1ox;
};
1iy;                   //Output block y (l)
1iy;                   //Output block y again
0iy{
  1oy;
};
0ox;
0ox;
0ox;
0ox;
0ox;
0ox;
0ox;
0ox;
0ox;
0ox;
0ix{
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  1ox;
};
0oy;
1iy;                   //Output block y (o)
0iy{
  1oy;
};
0ox;
0ox;
0ox;
0ox;
0ix{
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  1ox;
};
1iy;                   //Output block y (space)
0iy{
  1oy;
};
0ox;
0ox;
0ox;
0ox;
0ox;
0ox;
0ox;
0ox;
0ix{
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  1ox;
};
1oy;
1iy;                   //Output block y (W)
0iy{
  1oy;
};
0ox;
0ox;
0ox;
0ox;
0ox;
0ox;
0ox;
0ox;
0ox;
0ox;
0ix{
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  1ox;
};
0oy;
1iy;                   //Output block y (o)
0iy{
  1oy;
};
0ox;
0ox;
0ox;
0ox;
0ox;
0ox;
0ox;
0ox;
0ix{
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  1ox;
};
0oy;
0oy;
1iy;                   //Output block y (r)
0iy{
  1oy;
};
0ox;
0ox;
0ox;
0ox;
0ox;
0ox;
0ox;
0ox;
0ox;
0ix{
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  1ox;
};
1iy;                   //Output block y (l)
0iy{
  1oy;
};
0ox;
0ox;
0ox;
0ox;
0ox;
0ox;
0ox;
0ox;
0ox;
0ox;
0ix{
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  1ox;
};
1iy;                   //Output block y (d)
0iy{
  1oy;
};
0ox;
0ox;
0ox;
0ox;
0ix{
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  0oy;
  1ox;
};
0oy;
1iy;                   //Output block y (!)
0iy{
  1oy;
};

This program outputs

Hello World!

(This program was a pain to code, so if you find any errors feel free to correct them, since I don't have any debugger)

Mathematics

Addition

0ox; 0oy;
0ix{ 1ox; 0oy; };
1iy;

Subtraction

0ox; 0ox; 0oy;
0iy{ 0ox; 1oy; };
1ix;

Multiplication

0ox; 0ox; 0ox; 0ox; 0ox;
0ix{ 1ox; 0oy; 0oy; 0oy; 0oy; 0oy; };
1iy;

99 Bottles of Beer

Too long to post :P Commented or Not Click here to see source-code

Implementation

BIO to Skull written in Thutu

(this implementation is not tested yet)

/=1/:ASC:=n=x/
/\/\/.*$//
/=;//
/0[Oo][Xx]/={0=[=+1=]%/
/1[Oo][Xx]/={0=[=-1=]%/
/0[Oo][Yy]/={1=[=+1=]%/
/1[Oo][Yy]/={1=[=-1=]%/
/0[Oo][Zz]/={2=[=+1=]%/
/1[Oo][Zz]/={2=[=-1=]%/
/0[Ii][Xx]/={0/
/0[Ii][Yy]/={1/
/0[Ii][Zz]/={2/
/1[Ii][Xx]/=|0=|/
/1[Ii][Yy]/=|1=|/
/1[Ii][Zz]/=|1=|/
/=}/%%/
/=n/=9/!
  /=x/=n=x/
.
/%/@
  /%/=}/
.

Implementation written by ais523