From Esolang
Jump to navigation Jump to search

Eso2D is a Turing-complete 2D fungeoid made by User:PythonshellDebugwindow.


Eso2D uses an unbounded tape of wrapping 8-bit cells, therefore it has unlimited memory. It also has a pointer called the cell pointer (CP) to keep track of the current cell. The cell at the CP is often called the accumulator.

Instruction pointer

Eso2D’s IP can move in 4 directions—0 (up), 1 (right), 2 (down), and 3 (left). It starts out in the top-left corner of the program moving right, and if it ever goes out of bounds, it wraps around, so


would start the IP at the top-left, turn it down, and then move it right forever because it keeps wrapping on the second row.


Before execution, Eso2D finds the longest row and pads all rows with spaces to that row’s length, and the same goes for columns.


Command Meaning
^ Set the IP’s direction to 0 (up)
> Set the IP’s direction to 1 (right)
v Set the IP’s direction to 2 (down)
< Set the IP’s direction to 3 (left)
, Increment the accumulator
_ Decrement the accumulator
X Reverse the accumulator’s direction
~ If the IP encounters this command while moving up, it will change direction to down; down, to up; and left or right, if the accumulator is less than 85, it will move up, or if the accumulator is greater than 170, it will move down
` If the accumulator is 0, the IP will change direction to down, else nothing will happen; does nothing if the IP is moving down when it encounters this command
& Sets the accumulator to the Unicode value of the first character of user input % 256 (or 10 if no input is given)
$ Sets the accumulator to user input as a base-10 integer, or 0 for an invalid base-10 integer
: For each character of user input, the next cell is set to its Unicode value % 256; e.g., for the code :&, input ABC will set the first three cells to 65, 66, and 67, and no input will set the first cell to 10
# Output the (extended) ASCII character of the accumulator’s value
* Output the accumulator’s value followed by a space
@ Exit the program (without raising an error)
0 Increment the accumulator by 5
1 Increment the accumulator by 50
2 Increment the accumulator by 97
3 Decrement the accumulator by 200
4 Decrement the accumulator by 5
5 Decrement the accumulator by 50
= If the accumulator is greater than 0, skip the next instruction
O Skip the next instruction no matter what
? Randomize the IP’s direction to either up, right, down, or left
} Increment the CP
{ Decrement the CP (if the CP is ever less than 0, the program will error and exit)
(space) Nop

All other characters, when encountered by the IP, will cause the program to error and exit.

Example programs

Hello, World!



 ^   <



Loop while no input

^   <

The above, but a one-liner


Random of 4 inputs

       @#{< >{{#@

Handy subprograms

You can include these anywhere in your program. The place where the IP goes in is marked with a bold, underlined arrow (^>v<) and where it comes out is marked with an italicized, underlined arrow (^>v<).

Set the accumulator to 0

v  <

You don’t need to include the exiting v, but you do need to include the entering >.


  • An interpreter written in Python, along with some examples, on GitHub.