256
Paradigm(s) | Turing tarpit |
---|---|
Designed by | Areallycoolusername |
Appeared in | 2019 |
Memory system | Stack-based |
Dimensions | One-dimensional |
Computational class | Possibly Turing complete |
Major implementations | 256.js |
File extension(s) | .256 |
- Not to be confused with Py256.
256 is a Stack-based esoteric programming language made by Areallycoolusername. It was made for Code Golf, and it's a Turing tarpit.
Commands
256 has 4 commands. Most of these commands are integers, and they deal with input, output, loops, control flow, and the stack.
Commands | Function |
---|---|
2 | Reads input to the stack |
5 | Declares a variable |
6 | label for Goto |
^ | If statement |
Specifics
On first glance, 256 looks highly incomplete and doesn't look viable for use in competitive golfing. However, this language has the few instructions it has to create new functions.
Any character in the program that doesn't match one of these commands, or isn't an argument in one of these commands, is printed during execution. However, if the character is also the name of a variable then that variable's value is printed instead.
Commands and their arguments are separated by semicolons.
2
The input command, 2, reads one character from the user, and pushes it to the top of the stack (the last defined variable). This command doesn't need any parameters, in order to minimize program size. e.g:
2;
5
The variable command, 5, declares a variable. This command has 2 arguments. This first is the variable name, which can only be 1 byte in length, and can be any Unicode character. The variable name length being only 1 byte is arbitrary, and doesn't affect us Turing completeness of this language, as the name is just a shell. The thing that matters is the value. The second argument is the value, which can be an integer, string, character, or boolean. The second argument is also optional (mostly so it can be set by the input command, #2). e.g:
5i99;
This sets the variable i
s value to 99
.
6
The label command, 6, is (arguably) the most essential command in this language. Without it, loops would not be allowed, and 256's use in competitive golfing would be nonexistent. In order to use this instruction, just put it anywhere in the program where you want to initiate a loop. Then, you can jump to it by calling 6 again, followed by what order that 6 is in. e.g:
6;h;61;6;e;62;
This program declares a 6. It is the first 6 in the program, so in order to jump to it, you have to declare 6 again, followed by a 1. This is done after the character "h" is printed. Another 6 is declared. It's the second 6 in the program, so in order to jump to it, a 6 has to be declared, followed by a 2. This is done after the character "e", is printed. However, the program will.never get past the first jump instruction, as the program has entered an infinite loop. So "h" is printed indefinitely.
^
The if statement, ^, is the fourth and last command in 256. When used, it must be followed by a condition, another ^ to tell the program what to do it the condition is met, and, optionally, another ^ to tell the program what to do otherwise. e.g:
5z99;6;^z>0^z;z--;61;^62;6
This program declares the variable z, with value 99. It then checks if a is more than 0. If it is, then z is printed, decremented, and the program jumps back to the start of the if statement. Otherwise, the program jumps to the second 6 in the program, and halts.
Computational class
256 is possibly Turing complete, as it can enter an infinite loop, and the stack is unbounded. Due to its use of only 4 commands, this language would also be considered a Turing tarpit if so. However, no Turing complete language has yet been simulated in it.
Examples
Here are examples of popular problems in 256. Each example has the amount of bytes used in each program, in order to prove that 256 can still be used in competitive golfing.
Hello World Program
13 bytes in total.
Hello, world!
Truth Machine
18 bytes in total.
5i;2;^i=1^1^6;0;61
When a variable has the command 2 as it's value, it must be separated by a semicolon.
Infinite Loop
4 bytes in total.
6;61
0 to 100
Prints numbers from 0 to 100. 29 bytes in total.
5z0;6;^z<101^z; ;z++;61;^62;6
Unofficial instructions
256's extreme simplicity makes it difficult to code golf in.
Integers instruction; i.e. the Looping counter (integers from top of stack down to 0), 25 28 bytes
5i12;6;i>0^i;i>0^5ii-1;2;61;
Call this instruction by typing ι;
as an instruction.
Interpreters
256.js
256.js (dead link) is a 256 interpreter in NodeJS made by Duckologist.