This is my 2d array-programing langauge. It's a WIP.
Your "Minotaur" starts at the upper-left corner of the program (0,0)
with an initial velocity of one to the right. At the beginning of "round," every minotaur steps forward and does something
Built using zig 0.13.0. Zig is somewhat unstable, so it (hopefuly) will work on newer version.
$ zig build
$ ./zig-out/bin/labyrinth -e '"hello world"-P-Q'
Command | # of args | Description | Equivalent to |
---|---|---|---|
` | ` | 0 | If moving vertically, whitespace; If moving horizontally, spawn another Minotaur and fork. |
- |
0 | If moving horizontally, whitespace; If moving vertically, spawn another Minotaur fork. | |
> |
0 | Sets the velocity to 1 right | |
< |
0 | Sets the velocity to 1 left | |
^ |
0 | Sets the velocity to 1 up | |
v |
0 | Sets the velocity to 1 down | |
{ |
0 | Increase the velocity by 1 in the current direction | |
} |
0 | Decreases the velocity by 1 in the current direction; If this results in 0 velocity, the direction is swapped instead. | |
J |
0 | Steps an additional time, skipping what would be the next instruction. | 1j |
j |
1 | Steps n times |
Command | # of args | Description |
---|---|---|
? |
1 | If the topmost element is falsey, turn 90º right. |
I |
1 | If the topmost element is falsey, turn 90º left. |
T |
1 | If the topmost element is falsey, pop the penultimate element. |
Command | # of args | Description | Equivalent to |
---|---|---|---|
. |
0 | Duplicates the topmost element on the stack | 1# |
: |
0 | Duplicates the penultimate element on the stack | 2# |
# |
1 | Duplicate the n th element on the stack (topmost is 1 ) |
|
, |
0 | Pops the topmost element off the stack | 1@ |
; |
0 | Pops the penultimate element off the stack | 2@ |
@ |
1 | Pops the nth element off the stack |
|
$ |
0 | Swaps the topmost and penultimate elements on the stack | :3@ |
C |
0 | Pushes the length of the stack before C is executed |
Command | # of args | Description | Equivalent to |
---|---|---|---|
+ |
2 | Adds the top two elements of the stack together | |
_ |
2 | Subtracts the topmost element from the penultimate element | |
* |
2 | Multiplies the top two elements of the stack together | |
/ |
2 | Divides the topmost element from the penultimate element | |
R |
0 | Pushes a random integer onto the stack | |
= |
2 | Pushes whether the top twomost elements are equal. | |
l |
2 | Pushes whether the penultimate element is smaller than the topmost element. | |
g |
2 | Pushes whether the penultimate element is smaller than the topmost element. | |
c |
2 | Pushes 1 , 0 , and -1 depending on how the penultimate element compares to the ultimate. |
|
! |
1 | 1 if the topmost element is 0 or an empty array; pushes 0 otherwise | |
X |
1 | Increment by one | |
x |
1 | Decrement by one |
Command | # of args | Description |
---|---|---|
A |
1 | chr ; cast the topmost value as an char and create a string. |
a |
1 | ord ; cast the topmost value as a string and return the codepoint of the first element. |
s |
1 | Converts the topmost element from an int to a string. |
i |
1 | Converts the topmost element from a string to an int. |
Command | # of args | Description |
---|---|---|
L |
1 | Pushes the length of the topmost element. |
G |
3 | todo: explain more. (str[index..index+len] ) |
S |
3 | todo: explain more. (str[index..index+len] = value ) |
Command | # of args | Description | Equivalent to |
---|---|---|---|
P |
1 | Interprets the topmost value as a string, and prints it followed by a newline. | p10P |
p |
1 | Interprets the topmost value as a string and prints it. | |
N |
1 | Interprets the topmost value as an integer and prints it, followed by a newline. | |
n |
1 | Interprets the topmost value as an integer and prints it. | n10P |
D |
0 | Dumps the interpreter out and then exits. | dQ |
d |
0 | Dumps the interpreter out. | |
Q |
0 | Exits with status code 0. | 0q |
q |
1 | Exits with status code n . |
|
U |
0 | reads a line from stdin. |