(,!)
(,!) is a esolang by yayimhere about modifying a 3 cell tape. There are only 10 commands. Its also really hard to use:) :
Symbol | Meaning |
---|---|
/ |
Perform a NAND on the cell on the left and the right and store the result into the current cell, then increment it by 1, and multiply it by 2 |
{ |
go to the left on the tape, and decrement the cell before it by 1 |
& |
set current cell to user input(single ascii char), and jump to the nearest [ After it
|
( |
jump to the nearest ) after it if the current cell is negative
|
) |
Print current cell as a ascii char, and jump back to corresponding bracket, if the current cell is positive |
[ |
jump to the nearest ) , after it, if the current cell is a 0, then print the current cell as a number
|
# |
copy the value in the current cell into the cell on the left, and then jump to the nearest " after it, and increment the cell on the right by 2.
|
" |
flip all the bits in current cell. flip the sign bit of the cell to the right if and only if the current cell is positive |
@ |
set current cell to the right sign bit NOR left sign bit, add whats in the right cell to the the result and do current cell SHL left cell and store it into the left cell |
% |
move to the left on the tape. |
|| |
whats encased in the |'s will remove all I/O from what it does |
: |
jump back to the state of the program 2 instructions back but do not change the position of the code pointer. this will create a branch in the program |
^ |
go to the next branch. does nothing if there is no more branches |
= |
copy the value in the current cell in current branch to the current cell in the branch before it |
} |
the effects of the command before this command will be undone |
The data pointer and branch pointer does wrap around. numbers have a sign bit as their first bit and have exactly as much width as is needed to store the value. If the operands to /
have different widths, the lesser one is widened with trailing zeroes. the numbers have an explicit end such that 0 ¬& 0 would not be -∞(or (1, ∞)). if there are no 1's in a byte or there is nothing proceding a 0 it byte reduces to 0(this excludes the sign bit). branches are layed out after which point they where created such that the first one is the first on the list
because of how hard it is to use this esolang, no programs has been written
One has been written:
#"}#"}#"}#"}#"}#"}#"}#"}#"}#"}#"}#"}#"}#"}#"}#"}#"}#"}{%%|[|)
Its a light intepreter. Also here's a one time cat(pretty sure it works):
&%/[}%):%})
cheating the esolang
there are many ways to do things such that some effects of a command that you don't want doesn't happen. use a command that jumps without having to do what the jump command does.
A do command A that has a jump B do what command A jumps too } reverse the effects of command B
Minor paradox
This does not make sense atall:
^}}:}}
First we jump back in time. Then we undo the jumpinh back in time in the time jump so we dont do the time jump so we never undone the time jump so we do the time jump… like the hell