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.
