We are currently working on new rules for what content should and shouldn't be allowed on this website, and are looking for feedback! See Esolang:2026 topicality proposal to view and give feedback on the current draft.
YesRandom2D
The primary goal of this language is to be 2D, use registers that can be edited quickly and conveniently while avoiding stacks as the primary data storage method.
The way programs are written and structured also happens to be annoying.
The cell tape should be infinite but can only be accessed from commands to use the values above the typical ASCII/Unicode limits.
To write data to the cell array, there are two "modes". The mode is determined if program position X is odd/even is different from if program position Y is odd/even are equal.
- If equal: (register id on cursor) Set register to be written to.
- If not equal: (value written on cursor) Write to register using the one specified in the equal mode. If no register specified yet, use 0.
Special register/cell interactions
Cell 68 (register 'D') determines the direction of the program cursor, having a range of 0-7, 0 being the right direction and every direction after going clockwise, (0=right, 1=down-right, 2=down, etc.) while including diagonal directions that will stall the program. Any value out of this range will stop the program.
Writing to Cell 67 (register 'C') will execute a command, depends on what is written. Command table
| Command written to C register | What it does ( [any] = read variable ) | Registers modified/read |
|---|---|---|
| Add (“@”) | O = A + S | A, S, O |
| Subtract (“;”) | O = [B] - [R] | B, R, O |
| Multiply (“$”) | o = [N] * [Q] | N, Q, o |
| Conditional Copy (“=”) | If [4]==33: [T]=[E] | 4, E, T |
| Conditional Copy (“V”) | If [7] > 3 then [F]=[R] | 7, F, R |
| Copy (“q”) | [R]=[W] | R, W |
| Input/Output (c=10) | If conditionalResult: Q = Input If !conditionalResult: out( [r] ) else: position = random value | r, Q |
| Goto | Set the pointer to the last instance hovered on by the pointer of the character specified in register j | j |
| Open File (“^”) | Reads string terminating at \0 starting in register specified in * and opens the file to read/append mode | * |
| Clear (“m”) | Sets file to be cleared. If there is no file, then do nothing | None |
| Write (“!”) | Appends the character specified in N to the currently opened file. | N |
| Read (“M”) | Read a character from the currently opened file. If file has ended return a -1. data is stored into * | * |
| Close (“v”) | Close currently opened file. Saves changes. | None |