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.
Catgirl Rainfart
Catgirl Rainfart is an esoteric programming language by user:raiseafloppafan7741 in 2026. It is actually made up of two twin languages, Catgirl and Rainfart.
Etymology
The author's original idea was to have a language named "Rainfart" since a Markov model generated it. Shortly after saving the name, he played with the Markov model again and it said "catgirl" (most likely referring to an IRC client) then the author remembered Duckwise Northward and somehow thought "Catgirl Rainfart" fit together.
Overview
Catgirl Rainfart is a binary system comprised of the languages Catgirl and Rainfart. They are both standalone.
There is a shared quack (queue-stack hybrid) of unbounded signed integers that Catgirl and Rainfart share. A quack is a queue where elements can also be popped from the back.
A Catgirl Rainfart program starts with the Catgirl program followed by the Rainfart program without any separation. When a Rainfart character is detected, the Catgirl program ends there. They are executed in round-robin fashion with Catgirl running an instruction, then Rainfart, then Catgirl, then Rainfart.
Popping from an empty stack in Catgirl or dequeuing from an empty queue in Rainfart returns zero, just like in Funge-98.
Catgirl
Catgirl is the younger twin in the Catgirl Rainfart binary system. It is a stack-based language.
Catgirl uses the stack part of the shared quack.
Being the yougner twin, it only uses characters accessible without the Shift key, at least on the QWERTY keyboard.
| Command | Description |
|---|---|
,
|
No-op. |
1
|
Pushes 1. |
=
|
Pops two values and pushes 1 if they are equal and 0 otherwise. |
-
|
Pops two values and pushes the difference of the second value popped and the first value popped. |
8
|
Swaps the top of the stack and the element below it. |
;
|
Pops a value without using it. |
'
|
Pops a value and pushes it twice. |
.
|
Pops the top of the stack, looks down that many stack slots (0 is the top), and swaps that stack slot with the top. If the stack is not big enough, then 0 is retrieved and the top is lost. |
`
|
Pops a value and prints it. |
/
|
Pops two values from the stack and pushes the quotient of the second value and the first value. Division by zero results in zero. |
[
|
Starts a do-while loop. This pops a value and if it is zero, jumps to the matching ].
|
]
|
Ends a do-while loop. This jumps back to its matching [.
|
Rainfart
Rainfart is the older twin in the Catgirl Rainfart binary system. It is a queue-based language.
Rainfart uses the queue part of the shared quack.
Being the older twin, it only uses characters accessible via the Shift key, at least on the QWERTY keyboard.
| Command | Description |
|---|---|
<
|
No-op. |
!
|
Dequeues a value and enqueues 0 if it is nonzero and 1 otherwise. |
+
|
Dequeues two values from the queue and enqueues their sum. |
*
|
Dequeues two values from the queue and enqueues their product. |
:
|
Dequeues a value without using it. |
"
|
Dequeues a value and enqueues it twice. |
>
|
Rolls the queue by dequeuing a value and enqueuing it. |
~
|
Dequeues a value and prints it modulo 256 as a byte. |
?
|
Reads a. |
{
|
Starts a while loop. This dequeues a value and if it is zero, jumps to the matching }.
|
}
|
Ends a while loop. This jumps back to its matching {
|
Computational class
Catgirl
Catgirl is likely at best a push-down automaton as despite the fact that it can peek down arbitrarily many stack slots, its addressable memory is limited by its stack size, and acquiring infinite memory would require an infinite stack.
Rainfart
Rainfart is Turing-complete as it is a queue automaton and queue automata are Turing-complete since a queue can simulate a tape.
Catgirl Rainfart
Since Rainfart is already Turing-complete, Catgirl Rainfart is also Turing-complete since one can simply take the lazy way and pretend Catgirl does not exist.
Examples
XKCD Random Number
1111,,,`<<<<+++
Catgirl only
1-1-1-1--`
Rainfart only
!1""+"++"*"*""*"*++~
Infinite loop
Catgirl only
1[1]
Rainfart only
!{}