Stroke+-

From Esolang
Jump to navigation Jump to search
Stroke+-
Stroke+- logo.png
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.

External resources