Stroke+-
Paradigm(s) | imperative |
---|---|
Designed by | User:Ttulka |
Appeared in | 2024 |
Dimensions | one-dimensional |
Computational class | Turing complete |
Major implementations | Interpreter in JavaScript |
Influenced by | Stroke |
File extension(s) | .🧠+- |
Stroke+-, also +{/|\}-
, is an esoteric structured programming language.
With only four instructions, it aims to be the simplest Turing-complete structured programming language possible.
It uses conditional loops and an unbounded number of non-negative integer variables along with manipulation of their values.
Stroke+- is an extension of Stroke, which is even simpler but at the cost of sacrificing Turing completeness.
Language
Stroke code consists only of stroke symbols /
, |
, \
, and arithmetic signs +
, -
.
All other symbols are ignored.
Instructions
Instr | Name | Meaning |
---|---|---|
+var |
Increment | Increments the value of the variable |
-var |
Decrement | Decrements the value of the variable |
/var |
Loop start | Enters a new loop if the variable is non-zero |
\ |
Loop end | Jumps back to the matching loop start |
The example code in Stroke+-:
+ | / | - | + || \ + |||
can be translated into the following pseudocode:
inc var0 while var0 dec var0 inc var1 inc var2
Optionally, the instruction for output !
may be implemented.
Variables
A Stroke+- program runs on a theoretically infinite tape of non-negative integer cells that are randomly accessible via variables denoted by consecutive vertical stroke symbols (|
) in unary form starting from zero. For instance, |
refers to the variable indexed by 0, ||
refers to the variable indexed by 1, |||
refers to the variable indexed by 2, and so on.
Examples
Empty program
The simplest program is the empty program:
nothing here
Infinite loop
As variable 0 is never reset, the program loops forever:
+|/|\
Clear
Sets the value of variable 0 to zero:
/|-|\
Move
Moves the value in variable 0 to 1:
/|-|+|\
Copy
Copies the value in variable 0 to 1 using 2 as an auxiliary:
/|-|+||+|||\/|||-|||+|\
Add
Adds the values in 0 and 1 to 0:
/||-||+|\
Conditional branching
Conditional branching (IF) can be simulated via loops:
/|-|+|||+||||\/||||-||||+|\/|||/|||-|||\ +|| conditionally \
Fibonacci sequence
Computes the Fibonacci sequence in 0 using 1 and 2 as auxiliaries:
+|||||/|||||/||-||+|||\/|-|+||\/|||-|||+|+||||\/||||-||||+|||\/|||-|||+||\\
Hello World
For computing "Hello World" the numeric values must be interpreted as a string. It can achieved by defining a binary alphabet:
Register | Binary | Decimal | Interpreted |
---|---|---|---|
A | 011010100 | 212 | Hel
|
B | 100101000 | 296 | lo⎵
|
C | 111101110 | 494 | Wor
|
D | 100001 | 33 | ld
|
The binary number 011010100100101000111101110100001
then corresponds to "Hello World".
To be concise, eight variables can be used and concatenated to represent the output.
+|+|+|+||+||+||+||+||+||+||+||+||+||+|||+|||+|||+|||+|||+|||+|||+|||+|||+ ||||+||||+||||+||||+||||+||||+||||+||||+|||||+|||||+|||||+|||||+|||||+ |||||+|||||+|||||+|||||+|||||+|||||+|||||+|||||+|||||+|||||+|||||+|||||+ |||||+|||||+|||||+|||||+|||||+|||||+|||||+|||||+|||||+|||||+|||||+|||||+ |||||+||||||+||||||+||||||+||||||+||||||+||||||+||||||+||||||+||||||+|||||| +||||||+||||||+||||||+||||||+||||||+||||||+||||||+||||||+||||||+||||||+ ||||||+||||||+||||||+||||||+||||||+||||||+||||||+||||||+||||||+|||||||
Computational class
Stroke+- is Turing complete according to the structured program theorem, as conditional branching (selection) can easily be simulated via loops.