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.

RaiseAfloppaFan's Stupid Idea 0

From Esolang
(Redirected from RSI0)
Jump to navigation Jump to search

RaiseAfloppaFan's Stupid Idea 0 or RSI0 (not to be confused with the x86-64 register rsi) is an esolang by User:raiseafloppafan7741 and User:Hammy (formerly User:Esolangist) where anyone on Codeberg can add any command that they want, as long as they follow the rules.

Base Specification

The "Base Specification" in RSI0 is the fundamental language without extensions. This is mostly rigid, however have commands added.

There are three separate memory regions -- an infinite-dimensional grid of cells, a tape of 2,763 cells, and three accumulators named A, B, and C. The cells and accumulators are all 32 bits in size, unsigned, and wrapping. On initialization, the program is loaded with the top-left UTF-32 character being at (0, 0), the character below that at (0, -1), and the character to the right at (1, 0). Empty spaces, like in Befunge, are the space character U+0020 .

There is an instruction pointer that starts out at (0, 0, 0...) and starts of with an IP delta of (1, 0, 0...) which is moving to the right in 2D. If the IP hits a space, then the pointer falls off and the program halts. If the IP reaches an unknown command, then it prints the following and halts.

The pointer got lost.

Sanity

Sanity is an important stat in the program that starts out as 100% but decreases by 0.3% per instruction by default, unless specified otherwise. If the sanity is lower than 75%, then the instruction pointer will have a 5% chance of turning left per instruction. If the sanity is lower than 50%, then it will decrease by 5% per instruction, making it unrecoverable. At less than 25%, the instruction pointer will start "hallucinating" and running a completely random instruction instead of the one that it's on. During this, the instruction pointer may also change direction randomly. Below 10%, the pointer will print "Hello, World", run a cat program, do a truth-machine or something else seemingly randomly, because it is hallucinating the commands needed. At 0%, the program halts and prints this:

The pointer hallucinated a halt command, even though there isn't even a halt command in this esolang.


Base Commands

Command Action Creator
みく or ミク or D Decrements sanity by 3.9% User:raiseafloppafan7741
てと or テト or I Increments sanity by 4.1% User:raiseafloppafan7741
| Reflects the IP horizontally, not affected by insanity User:raiseafloppafan7741
- Reflects the IP vertically, not affected by insanity User:raiseafloppafan7741
< Makes the IP move left User:raiseafloppafan7741
> Makes the IP move right User:raiseafloppafan7741
^ Makes the IP move up User:raiseafloppafan7741
v Makes the IP move down User:raiseafloppafan7741
o Makes the IP move forward along the Z-axis User:raiseafloppafan7741
O Makes the IP move backward along the Z-axis User:raiseafloppafan7741
. Outputs a UTF-32 string starting at the cursor with the A register containing the amount of characters to output. User:raiseafloppafan7741
, Asks the user for a line of UTF-32 and lays it out in the memory tape, with the A register containing the length. User:raiseafloppafan7741
X No-op. User:raiseafloppafan7741
A Swaps the values of A and B User:raiseafloppafan7741
B Swaps the values of B and C User:raiseafloppafan7741
w Writes the value in the A register to the current memory cell User:raiseafloppafan7741
r Reads the value from the current memory cell to the A register User:raiseafloppafan7741
+ Increments the current cell User:raiseafloppafan7741
x Decrements the current cell User:raiseafloppafan7741
$ Copies the command 2 steps forward in the IP's direction to the current tape cell. Decreases sanity by 0.45%. User:raiseafloppafan7741
P Sets the command 2 steps forward to the current tape cell. Decreases sanity by 0.5%. User:raiseafloppafan7741
# Jumps 2 steps forward in the IP's direction. Decreases sanity by 0.6%. User:raiseafloppafan7741
/ If the IP is coming from above then redirects it to the left and vice versa. If the IP is coming from the right then redirects it downwards and vice versa. (Immune to insanity as it is a physical barrier) User:raiseafloppafan7741
\ If the IP is coming from above then redirects it to the right and vice versa. If the IP is coming from the left then redirects it downwards and vice versa. (Immune to insanity as it is a physical barrier) User:raiseafloppafan7741
` If the current tape cell is zero, then it behaves like # but consumes 0.65% sanity. Otherwise, behaves like a NOP and consumes 0.4% sanity. User:raiseafloppafan7741
Moves the tape pointer left. The tape pointer wraps around at the ends. User:Hammy (User:Esolangist)
Moves the tape pointer right. The tape pointer wraps around at the ends. User:Hammy (User:Esolangist)
🔝 Moves forward in Nd. User:Hammy (User:Esolangist)
🔙 Moves backward in Nd. User:Hammy (User:Esolangist)
¶(user)
Loads the extensions by the user user. For example, ¶Esolangist loads the User:Esolangist extensions. User:Hammy (User:Esolangist)

Extensions

These must first be loaded using the command. They add onto the base set of instructions and may also modify the behavior of the whole language. Extensions may also depend on other extensions. (for example, the AMM sub-extension depends on the User:Esolangist extensions) By default, if an extension depends on an extension not loaded yet, the program prints the following and halts.

You are missing something.

Two extensions may redefine the same command, however if they are both loaded at the same time and the conflicting instruction is executed, then the program prints "The pointer is indecisive, why don't you go help them out?" and halts. This behavior also applies to redefining an instruction in the Base Specification.

As of 31 August 2026, there are only two extensions.

Computational class

With the base specification alone, RSI0 is likely either a bounded-storage machine or linear bounded automaton since despite the infinite playfield, it can only get and set the command two steps in front of the IP. However, using the Arbitrary Memory Manipulation sub-extension it should be close to Turing-complete.

RSI0 is Plushie-complete, Storm-complete level 1, Crystal-complete, and is anti-Non-Plushie-complete.

Examples

Hello, world!

This one works for the reference implementation.

v>v>v>v>v>v>v>v>v
+トテトvトvトvテvトvテA++
rテトテvテvテvテvテvトw++
テトvトvトvトvトvトvテ++A
トテ$.$.$.$.$.$ト+テ.
テ.#r#r#r#r#r#.+ト
トHello, world!テト
テ#.#.#.#.#.#.#トテ
ト$テ$テ$テ$テ$テ$テ$テ+
v^ト^ト^ト^ト^ト^ト^ト+
>^>^>^>^>^>^>^>^

This one also works too. (If you're lucky enough for the pointer to hallucinate a "Hello, world!" program then hallucinate a space right after.)

>YZv
   #
  /--\
  |>v|
  |^<|
  \--/

Infinite loop

>テト<

Vertical version

v
テ
ト
^

Square version

>テトv
テ  ト
ト  テ
^テト<

They most likely do not look aligned unless your font has Latin, CJK, emojis, and other symbols all have the same width.

Cat program

,.

Vertical version

v
,
.

Truth machine

Alternated

>™

(kinda cheating though.)


Nondeterministic Multi-tool

This program simply loops until the sanity level reaches zero. Because of the effects of a low sanity level, this program can do any of these. You can interpret that any way you want, as either the program does that or it hallucinates the instructions to do that.

>v
^<

One with borders to prevent the IP from escaping.

>v
 #
/--\
|>v|
|^<|
\--/

Error quine

The pointer got lost.

This works because T does not mean anything in the base specification.

Plushie-completeness proof

Print 4

>$#4A→+r←.

Print 31

>$#3A→+r←.$#1.

Store the number 2 in the playfield

>++P| | <- stored between these walls

Store the number 2 in the A, B, or C registers

>++rAB
   |^^
   |||
   ||+-- store in C from B
   |+--- store in B from A
   +---- store in A

Store the number 2 in the tape

>++

See also

External resources