Marble maze

From Esolang
Jump to navigation Jump to search

Info

Marble Maze is a multidimensional esolang made by User:Helpeesl Elijah Hunt on March 14th 2025 and is inspired by marble mazes, hence the name. (Also it was gonna be called marbles but that’s already the name of an esolang.

Commands

Board commands
Commands What they do
@ When the program starts spawn a marble there
: If touched duplicate that marble one to the right if there isn’t a marble or % there
$ When touched input that marble’s value as a character or a at least 2 digit number
O When touched output that marble’s value as a Character and delete it
Q When touched output that marble’s value as a number and delete it
# No-op
% When touched send that marble back and repeat that until there’s no more touching
When touched delete that marble
[ When touched push that marble’s value onto the bottom of the deque and delete it
] When touched push that marble’s value onto the top of the deque and delete it
{ When touched set that marble’s value to the bottom item of the deque and then pop it
} When touched set that marble’s value to the top item of the deque and then pop it
~ When touched swap the top two items of the stack
0-9 When touched multiply that marble’s value by ten and add the number of the command
+ Store a number when touched without a value and when touched with a value add that marble’s value and the value stored then remove the stored value
* Store a number when touched without a value and when touched with a value multiply that marble’s value and the value stored then remove the stored value
- when touched negate that marble’s value
/ When touched reciprocate that marble’s value
\ When touched floor that marble’s value
= Store a number when first touched and when touched again and those values are equal set that Boolean to true otherwise false
< Store a number when first touched and when touched again and that marbles number is less set that Boolean to true otherwise false
> Store a number when first touched and when touched again and that marbles number is more set that Boolean to true otherwise false
! When touched flip that marbles Boolean
( When touched move that marble right if the Boolean stored is true
v When touched move that marble down if the Boolean stored is true
) When touched move that marble left if the Boolean stored is true
^ When touched move that marble up if the Boolean stored is true
Move commands
Commands What they do
> moves the marbles right
v moves the marbles down
< moves the marbles left
^ moves the marbles up
ǀ no-op
( sets a label
) goes to that label

After a double new line the commands are move commands. Before a double new line the commands are board commands.

Examples

Truth machine

@49 O
@$=:^
O

>>v>(|)

Bitwise cyclic tag reader

49=###
@$#:($
@ %{ ]

^>(>^>v<vv<)
    #  
49=##{]
@$#:#($
@ ###

^>>^(>v>|^^vvv>>^v<<^^<<)
#@@ 
$94
#=
:#v
##${
##]

v<v>(v<>|v><^^)

Fibonacci sequence printer

@1
%:#
##+
%#%
#:Q

>v(vv<<v^^>^)
#:##
1+#%
@%:Q

^^>(vv^<>>><)

Cat program

@
:$
%O

(v)

Extra stuff

It’s Turing complete and you can determine when the program halts because when the moves end, the program ends. Let me clarify, The program loops forever only if there’s a ( in between a ) and a double new line. Otherwise the moves will end and it will halt. So, that’s how you solve the halting problem for it. That’s for you user:stkptr