Three variable modification language
Three variable modification language is an esolang, but you aren't going to be setting the variables, because you get an astronomically low amount of just 3 predetermined variables, which go by the names of a, b, and c.
The three variables
Like I just mentioned (unless you weren't reading), there are just three variables, which have values so you can do meaningful things with them. And their values are:
a = 3 b = -2 c = -1
And that's all the numbers you CAN use, since you aren't allowed to add one to a variable, but you can only add variables to each other, which applies to all operations here; this language is around as painful as maybe brainfuck, but probably even worse due to the amount of thinking you do to do, well, next to anything, you basically have to have entire backup variable (that's why R
exists) in case you route a program that runs into a dead end.
And as you may have noticed from wording, yes. Writing programs in this esolang is like sidereading something you aren't able to sideread easily. Which basically makes this is trial and error.
The syntax
All the commands here have no separators, so the ability for the code to be read is entirely at the mercy of the reader's understanding. But before you scream, the variables are the only things that get filled in, everything else is set for you (I hope), and note that for all arithmetic, they are written in prefix so +ab
is a + b
. And the answer is stored in the second variable listed.
Command | Function | Syntax |
---|---|---|
+ |
Add two variables | +[var][var]
|
- |
Subtract two variables | -[var][var]
|
* |
Multiply two variables | *[var][var]
|
/ |
Divide two variables | /[var][var]
|
> |
Output variable as number | >[var]
|
< |
Output variable as ASCII character | <[var]
|
! |
Negate a variable (i.e. multiply it by -1) | ![var]
|
R |
Reset a variable to its starting value | R[var]
|
w[ |
Do a set of statements until the variable listed is zero or negative. | w[[var]
|
i[ |
Do a set of statements if and only if the variable listed is zero or negative. | i[[var]
|
] |
End while loop / if statement | ]
|
That's all the commands, the only hard part is putting those variables to use! You also may have noticed there's no input, but that's because it makes you select a number that isn't a variable probably, not good!!!!
Programs
Hello World program
*aa*ac*cc-ca<aRa-ba*ba*ba-ca<aRc+bc+bb+bc-ac<c<cRa+ac<c/caRbRc+bc+bb+bc-ac<cRc+bc+ac<cRa*ac*aa-ca<aR a*ab-bc-ac<c+ca<aRa-ca<aRb+bb+bb+ab<bRbRc*bb*bb+bb-bc<c
Counter
/bb*cc>cw[c+bc>c]
99 bottles of beer program
*aa-ab*baw[a>a Rc!c-bb+cb+bb+bb+bb+bb+bb<b Rc!c-bb+cb+bb+cb+bb+bb+bb+bb+cb+bb<b Rc!c-bb+cb+bb+cb+bb+bb+cb+bb+cb+bb+cb+bb+cb<b Rc!c-bb+cb+bb+cb+bb+cb+bb+bb+cb+bb+bb<b<b Rc!c-bb+cb+bb+cb+bb+bb+cb+bb+cb+bb+bb<b Rc!c-bb+cb+bb+cb+bb+bb+bb+cb+bb+bb+cb<b Rc!c-bb+cb+bb+cb+bb+cb+bb+bb+bb+cb+bb+cb<b Rc!c-bb+cb+bb+bb+bb+bb+bb<b Rc!c-bb+cb+bb+cb+bb+bb+cb+bb+cb+bb+cb+bb+cb<b Rc!c-bb+cb+bb+cb+bb+bb+bb+cb+bb+cb+bb<b Rc!c-bb+cb+bb+bb+bb+bb+bb<b Rc!c-bb+cb+bb+cb+bb+bb+bb+bb+cb+bb<b Rc!c-bb+cb+bb+cb+bb+bb+bb+cb+bb+bb+cb<b<b Rc!c-bb+cb+bb+cb+bb+cb+bb+bb+bb+cb+bb<b Rc!c-bb+cb+bb+bb+bb+bb+bb<b Rc!c-bb+cb+bb+cb+bb+bb+cb+bb+cb+bb+cb+bb+cb<b Rc!c-bb+cb+bb+cb+bb+bb+cb+bb+cb+bb+cb+bb<b Rc!c-bb+cb+bb+bb+bb+bb+bb<b Rc!c-bb+cb+bb+cb+bb+cb+bb+bb+cb+bb+bb<b Rc!c-bb+cb+bb+cb+bb+bb+cb+bb+bb+bb<b Rc!c-bb+cb+bb+cb+bb+bb+bb+cb+bb+bb+cb<b Rc!c-bb+cb+bb+bb+bb+bb+bb<b Rc!c-bb+cb+bb+cb+bb+cb+bb+bb+cb+bb+cb+bb+cb<b Rc!c-bb+cb+bb+cb+bb+bb+bb+bb+bb+cb<b Rc!c-bb+cb+bb+cb+bb+bb+cb+bb+cb+bb+bb<b<b Rc!c-bb+cb+bb+bb+cb+bb+cb+bb+bb<b Rc!c-bb+cb+bb+bb+cb+bb<b >a Rc!c-bb+cb+bb+bb+bb+bb+bb<b Rc!c-bb+cb+bb+cb+bb+bb+bb+bb+cb+bb<b Rc!c-bb+cb+bb+cb+bb+bb+cb+bb+cb+bb+cb+bb+cb<b Rc!c-bb+cb+bb+cb+bb+cb+bb+bb+cb+bb+bb<b<b Rc!c-bb+cb+bb+cb+bb+bb+cb+bb+cb+bb+bb<b Rc!c-bb+cb+bb+cb+bb+bb+bb+cb+bb+bb+cb<b Rc!c-bb+cb+bb+cb+bb+cb+bb+bb+bb+cb+bb+cb<b Rc!c-bb+cb+bb+bb+bb+bb+bb<b Rc!c-bb+cb+bb+cb+bb+bb+cb+bb+cb+bb+cb+bb+cb<b Rc!c-bb+cb+bb+cb+bb+bb+bb+cb+bb+cb+bb<b Rc!c-bb+cb+bb+bb+bb+bb+bb<b Rc!c-bb+cb+bb+cb+bb+bb+bb+bb+cb+bb<b Rc!c-bb+cb+bb+cb+bb+bb+bb+cb+bb+bb+cb<b<b Rc!c-bb+cb+bb+cb+bb+cb+bb+bb+bb+cb+bb<b Rc!c-bb+cb+bb+bb+cb+bb+cb+bb+cb+bb<b Rc!c-bb+cb+bb+bb+cb+bb<b Rc!c-bb+cb+bb+bb+cb+bb+bb+cb+bb+bb<b Rc!c-bb+cb+bb+cb+bb+bb+bb+bb+bb+cb<b Rc!c-bb+cb+bb+cb+bb+bb+cb+bb+bb+cb+bb+cb<b Rc!c-bb+cb+bb+cb+bb+bb+bb+cb+bb+bb+cb<b Rc!c-bb+cb+bb+bb+bb+bb+bb<b Rc!c-bb+cb+bb+cb+bb+bb+cb+bb+cb+bb+cb+bb+cb<b Rc!c-bb+cb+bb+cb+bb+bb+cb+bb+cb+bb+cb+bb<b Rc!c-bb+cb+bb+cb+bb+bb+bb+cb+bb+bb+cb<b Rc!c-bb+cb+bb+bb+bb+bb+bb<b Rc!c-bb+cb+bb+cb+bb+bb+bb+cb+bb+bb<b Rc!c-bb+cb+bb+cb+bb+bb+cb+bb+cb+bb+cb+bb+cb<b Rc!c-bb+cb+bb+cb+bb+cb+bb+bb+cb+bb+cb+bb+cb<b Rc!c-bb+cb+bb+cb+bb+bb+cb+bb+cb+bb+cb+bb<b Rc!c-bb+cb+bb+bb+cb+bb+cb+bb+bb<b Rc!c-bb+cb+bb+bb+bb+bb+bb<b Rc!c-bb+cb+bb+cb+bb+cb+bb+bb+bb+bb<b Rc!c-bb+cb+bb+cb+bb+bb+bb+bb+bb+cb<b Rc!c-bb+cb+bb+cb+bb+cb+bb+bb+bb+cb+bb+cb<b<b Rc!c-bb+cb+bb+bb+bb+bb+bb<b Rc!c-bb+cb+bb+cb+bb+bb+cb+bb+bb+bb+cb<b Rc!c-bb+cb+bb+cb+bb+cb+bb+bb+cb+bb+bb<b Rc!c-bb+cb+bb+bb+bb+bb+bb<b Rc!c-bb+cb+bb+cb+bb+bb+bb+bb+bb+cb<b Rc!c-bb+cb+bb+cb+bb+cb+bb+bb+bb+cb+bb<b Rc!c-bb+cb+bb+cb+bb+bb+cb+bb+cb+bb+cb+bb+cb<b Rc!c-bb+cb+bb+cb+bb+cb+bb+bb+cb+bb+bb+cb<b Rc!c-bb+cb+bb+cb+bb+bb+cb+bb+cb+bb+cb+bb<b Rc!c-bb+cb+bb+cb+bb+bb+bb+cb+bb+bb<b Rc!c-bb+cb+bb+bb+cb+bb+cb+bb+bb<b Rc!c-bb+cb+bb+bb+cb+bb<b Rc+ca>a !c-bb+cb+bb+bb+bb+bb+bb<b Rc!c-bb+cb+bb+cb+bb+bb+bb+bb+cb+bb<b Rc!c-bb+cb+bb+cb+bb+bb+cb+bb+cb+bb+cb+bb+cb<b Rc!c-bb+cb+bb+cb+bb+cb+bb+bb+cb+bb+bb<b<b Rc!c-bb+cb+bb+cb+bb+bb+cb+bb+cb+bb+bb<b Rc!c-bb+cb+bb+cb+bb+bb+bb+cb+bb+bb+cb<b Rc!c-bb+cb+bb+cb+bb+cb+bb+bb+bb+cb+bb+cb<b Rc!c-bb+cb+bb+bb+bb+bb+bb<b Rc!c-bb+cb+bb+cb+bb+bb+cb+bb+cb+bb+cb+bb+cb<b Rc!c-bb+cb+bb+cb+bb+bb+bb+cb+bb+cb+bb<b Rc!c-bb+cb+bb+bb+bb+bb+bb<b Rc!c-bb+cb+bb+cb+bb+bb+bb+bb+cb+bb<b Rc!c-bb+cb+bb+cb+bb+bb+bb+cb+bb+bb+cb<b<b Rc!c-bb+cb+bb+cb+bb+cb+bb+bb+bb+cb+bb<b Rc!c-bb+cb+bb+bb+bb+bb+bb<b Rc!c-bb+cb+bb+cb+bb+bb+cb+bb+cb+bb+cb+bb+cb<b Rc!c-bb+cb+bb+cb+bb+bb+cb+bb+cb+bb+cb+bb<b Rc!c-bb+cb+bb+bb+bb+bb+bb<b Rc!c-bb+cb+bb+cb+bb+cb+bb+bb+cb+bb+bb<b Rc!c-bb+cb+bb+cb+bb+bb+cb+bb+bb+bb<b Rc!c-bb+cb+bb+cb+bb+bb+bb+cb+bb+bb+cb<b Rc!c-bb+cb+bb+bb+bb+bb+bb<b Rc!c-bb+cb+bb+cb+bb+cb+bb+bb+cb+bb+cb+bb+cb<b Rc!c-bb+cb+bb+cb+bb+bb+bb+bb+bb+cb<b Rc!c-bb+cb+bb+cb+bb+bb+cb+bb+cb+bb+bb<b<b Rc!c-bb+cb+bb+bb+cb+bb+cb+bb+cb+bb<b Rc!c-bb+cb+bb+bb+cb+bb<b<b ]
Computational Class
By setting up variables with +ba-bb-cc
, you have 1 in a and 0 in the other 2 variables. By assuming variables can be infinitely large in both directions and implementing input, 1 free variable can act as an infinitely large trinary tape (possible symbols are 0, 1 and blank or 2), and the other as a tape pointer, which proves that this is turing complete, by simulating a Turing machine.
Interpreter
- Common Lisp implementation of the Three variable modification language programming language.