A brief explaination of the 硕鼠 example programs

From Esolang
Jump to navigation Jump to search
Back to 硕鼠

This is a brief explaination of the example programs in the esolang 硕鼠, because that esolang is very unreadable.

Rat Program

吱吱吱吱吱吱吱
吱吱吱吱吱
吱吱吱
吱吱吱吱
吱吱吱吱吱吱

Line 1: Add 1 to register, now the register is 1, which allows the program to enter line 2 and go to line 3.

Line 3 will read a character from the standard input and into the register, and then line 4 prints it, that does a one time rat.

Line 2 and 5 make the rat program infinite unless you entered a null byte, which is impossible, so that is how this program do a rat program.

Hello World

Vey easy, just 3 steps for each character:

  1. Push character
  2. Write to register
  3. Output

Truth Machine

吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱
吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱
吱
吱吱吱吱吱
吱吱吱吱
吱吱吱吱吱吱
吱吱吱吱吱吱
吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱
吱
吱吱吱吱

Line 1:

吱吱吱

Read a character

Line 2 to 48:

吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱

48 register decrements, which subtracts the register by 48 (the ASCII of 0).

Line 49 to 55:

吱吱吱吱吱
吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱
吱
吱吱吱吱吱
吱吱吱吱
吱吱吱吱吱吱
吱吱吱吱吱吱

If the value entered by the user is not 0, then this part will be executed, which sets the register to 49 (the ASCII of 1) and prints it forever, thus prints 1 forever.

Line 56 to the end:

吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱
吱
吱吱吱吱

If the value entered by the user is 0, then line 32 to 38 will not be executed, thus this part will. This pary sets the register to 30 (the ASCII) of 0, and print once, thus prints a 0.

Reverse Rat Program

吱吱吱吱吱吱吱
吱吱吱吱吱
吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱
吱吱吱吱吱吱
吱吱吱吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱
吱吱吱吱吱
吱
吱吱吱吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱
吱吱吱吱吱吱吱
吱吱吱吱吱吱吱
吱吱吱吱吱吱吱
吱吱吱吱吱吱吱
吱吱吱吱吱吱吱
吱吱吱吱吱吱吱
吱吱吱吱吱吱吱
吱吱吱吱吱吱吱
吱吱吱吱吱吱吱
吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱

Line 1:

吱吱吱吱吱吱吱

Register increment, allows program to enter line 2.

Line 2 to 15:

吱吱吱吱吱
吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱
吱吱吱吱吱吱

Reads char repeatedly, then subtract it by 10 and pushes it into a stack, this will cause this part to finished when a line feed is read.

Line 16:

吱吱吱吱吱吱吱吱吱吱吱

Discards 0 at stack top so there won't be a redundant line feed at the beginning of output.

Line 17 to end:

吱吱吱吱吱吱吱
吱吱吱吱吱
吱
吱吱吱吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱
吱吱吱吱吱吱吱
吱吱吱吱吱吱吱
吱吱吱吱吱吱吱
吱吱吱吱吱吱吱
吱吱吱吱吱吱吱
吱吱吱吱吱吱吱
吱吱吱吱吱吱吱
吱吱吱吱吱吱吱
吱吱吱吱吱吱吱
吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱吱吱
吱吱吱吱吱吱

Pop stack top to register, then add it by 10 and print, which restores the characters in the input, then subtract by 10, because the stack has an initial 0 at the bottom, so it will print repeatedly until the stack has only one element in it, which successfully uses the stack's LIFO strategy to reverse the input.