Stroke+-

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.
== External resources==
* An interpreter in JavaScript
Category:Languages Category:Turing complete Category:Low-level Category:Turing tarpits Category:Implemented Category:2024