Maze

Maze is a programming language based on variables that move over instructions. Each Variable is called a Car. Their passage is guided by walls and other controls.

Function commands
Functions are defined by putting 2 letters in the maze in the path of the car. The code for the function follows the maze. Example: AA-> ="Hello" //Make car equal Hello AB-> IF ** THEN %U ELSE %D //If there is a signal in the maze with a car on it, the car will go UP. If not, it will go down. AC-> -=30 //Subtract 30 from value of car

Timing:

Every 'Tick', every car will move 1 step.

Hello World
##,##,## ##,^^,## //Car Starts ##,AA,## //Do AA to Car ##,>>,## //Print Car ##,,## //Destroy Car ##,##,## AA-> ="Hello World!"

99 bottles of beer
##,##,##,##,##,##,##,##,##,##,##,##,## ##,##,##,##,##,^^,##,##,##,##,##,##,## //Start Car ##,##,##,##,..,<>,..,..,##,##,##,##,## //Make New Car ##,..,..,..,..,##,##,..,##,##,##,##,## ##,..,##,##,##,..,..,<>,..,..,##,##,## //Make New Car ##,AA,##,##,##,AB,##,##,##,AC,##,##,## //Set Values of Cars ##,%D,..,..,##,%D,..,..,##,%D,..,..,## //Make sure car goes down ##,>>,##,..,##,..,##,..,##,..,##,..,## //Printing... ##,..,##,>>,##,>>,##,>>,##,..,##,AC,## ##,>>,##,..,##,..,##,..,##,..,##,>>,## ##,..,##,..,##,..,##,..,##,>>,##,AF,## ##,AD,**,AG,##,..,AE,..,##,..,AE,..,## //Have we got to one? ##,,##,##,##,##,,##,##,##,,##,## //Destroy Cars ##,##,##,##,##,##,##,##,##,##,##,##,## AA-> =99 AB-> ="Bottles of Beer on the wall," AC-> ="Bottles of Beer\n" AD-> IF == 1 THEN %D ELSE %R AE-> IF ** THEN %R ELSE %D AF-> ="You Take one down, Pass it around," AG-> -= 1

Truth-machine
##,##,##,##,##,##,## ##,##,##,^^,##,##,## ##,##,##,<<,##,##,## ##,,>>,AA,>>,..,## ##,##,##,..,##,..,## ##,##,##,..,..,..,## ##,##,##,##,##,##,## AA-> IF ==0 THEN %L ELSE %R

Fibonacci sequence
This program works in the Python interpreter below. ##,##,##   // fibonacci ##,##,^^,##,##            ##,..,<>,PP,## ##,..,##,..,##,##,##,##,##,##,##,## // left column is fib(n), right column is fib(n+1). ##,##,##,##,##,%D,..,LD,..,**,..,..,..,..,..,## // the small left loop sets fib(n) to 0; simultaneously, ##,..,..,..,##,>>,##,..,## ##,##,##,##,##,..,## // the small right loop sets a clone of fib(n+1) to fib(n+1)+f(n). ##,MM,##,..,##,..,##,..,##,##,..,..,..,##,..,## // (this technique is similar to brainfuck [->+<]) ##,..,**,FL,..,02,##,%R,..,##,..,##,PP,##,..,## // the small loop at the bottom does nothing, but make sure ##,##,##,NL,##,##,##,%D,<>,01,FR,..,..,##,..,## // that the original fib(n+1) is synchronized with the other cars. ##,>>,##,##,##,..,##,##,03,##,##,##,..,## // then fib(n+1) goes to left column and fib(n+1)+fib(n) to right column ##,,##,..,..,FM,..,..,%R,..,..,..,..,## ##,##,##,..,##,..,##,##,##,##,##,##,##,##            ##,..,..,..,##             ##,##,##,##,## PP-> +=1 MM-> -=1 FR-> IF ** THEN %U ELSE %D FL-> IF ==0 THEN %D ELSE %L FM-> IF ** THEN %L ELSE %R LD-> IF ** THEN %L ELSE %D NL-> ="\n"

Computational class
Let's show that Maze is Turing complete, via reduction from 3-cell brainfuck, which is known to be Turing complete. (See Collatz function for a proof that 3-cell brainfuck is Turing complete.)

Any 3-cell brainfuck program is equivalent to the following Maze program: ##,##,##,##,##,##,##                     ##,##,^^,##,##,##,##                      ##,..,<>,%R,..,##,## ##,02,##,%D,<>,..,## ##,..,##,..,##,..,##                     ##,..,##,..,##,PP,##  // + ##,..,##,..,##,MM,## // - ##,%D,..,%L,##,..,## // > ##,**,##,%D,..,..,## ##,..,##,..,##,##,##                     ##,SW,01,SW,..,..,## ##,..,##,**,##,..,##                     ##,03,##,03,##,..,##                      ##,..,##,%R,..,%D,##  // < ##,..,..,%D,##,**,## ##,##,##,..,##,..,##                     ##,..,..,WS,01,WS,## ##,..,##,**,##,..,##                     ##,..,##,03,##,03,## ##,##,##,##,##,##,##,##,..,##,..,##,..,##  // [ ##,..,..,..,..,..,..,..,SW,..,SW,..,%D,## ##,..,##,##,##,##,##,##,..,##,..,##,..,## ##,..,##,..,..,..,..,..,SW,..,%D,##,..,## ##,..,##,..,##,##,##,##,..,##,..,##,..,## ##,..,##,..,##,..,..,..,%D,##,..,##,..,## ##,..,##,..,##,**,##,##,..,##,..,##,..,## ##,..,##,..,##,..,##,##,..,##,..,##,..,## ##,..,##,..,##,**,##,##,..,##,..,##,..,##,##,##,##,##,##,##,## ##,..,##,..,##,..,##,##,..,##,..,##,LO,..,**,..,**,..,**,..,## ##,..,##,..,##,**,##,##,..,##,..,##,..,##,##,##,##,##,##,**,## ##,..,##,08,##,16,##,##,..,##,SW,..,SW,..,..,..,..,..,##,..,## ##,..,##,..,##,..,##,##,..,##,..,##,..,##,##,##,##,..,##,..,## ##,..,##,..,##,..,##,##,SW,..,SW,..,SW,..,..,..,##,..,##,..,## ##,..,##,..,##,..,##,##,..,##,..,##,..,##,##,..,##,..,##,..,## ##,..,##,08,##,16,##,##,..,##,..,##,..,##,##,..,##,..,##,..,## // ] ##,..,##,..,##,..,..,..,..,##,..,##,..,##,##,..,##,..,##,..,## ##,..,##,..,##,##,##,##,##,##,..,##,..,##,##,..,##,..,##,..,## ##,..,##,..,..,..,..,..,..,..,..,##,..,##,##,..,##,..,##,..,## ##,..,##,##,##,##,##,##,##,##,##,##,..,##,##,..,##,..,##,..,## ##,..,..,..,..,..,..,..,..,..,..,..,..,##,##,..,##,..,##,..,## ##,##,##,##,##,##,##,##,##,##,##,##,##,##,##,..,##,..,##,..,##                      ##,..,..,..,..,..,..,..,..,##,..,##,..,##                      ##,..,##,##,##,##,##,##,##,##,..,##,..,##                      ##,..,##,..,..,..,..,..,..,..,..,##,..,##                      ##,..,##,..,##,##,##,##,##,##,##,##,..,##                      ##,..,##,..,##,..,..,..,..,..,..,..,..,##                      ##,..,##,..,##,..,##,##,##,##,##,##,##,##                      ##,,##,,##,,##                      ##,##,##,##,##,##,## PP-> +=1 MM-> -=1 SW-> IF ** THEN %R ELSE %D WS-> IF ** THEN %L ELSE %D LO-> IF ==0 THEN %R ELSE %D
 * Begin the Maze program with the code:
 * Translate brainfuck instructions into Maze, one instruction per line, as follow:
 * Append to the end of the program the code:

How it works: When the program begins, three cars are created, each representing a brainfuck cell. The cars travel on three parallel routes; the car in the rightmost route is the "current" cell. Instructions  and   increment and decrement that car's value. Instructions  and   make the cars swap routes: the car matching the "new current cell" comes to the rightmost route and the other two follow accordingly. Instruction  spawn three new routes, leading to the matching. Nested loops are not an issue, as long as extra routes from outer loops are moved to the right to get round inner routes. Similarly,  spawn three routes that lead back to the matching. Needless to say, all those peripheral routes must be continued in the body of the loop, parallel to the three main routes.

External resources

 * A Python Maze interpreter