+-)

From Esolang
Jump to navigation Jump to search

+-) is a minimalistic esolang invented by User:None1 and inspired by brainfuck.

Memory

There is a tape with three cells, each cell contains an unbounded signed integer. There is also a pointer that wraps around.

Commands

In +-), there are three commands, both + and - matches ).

  • +: Increment current cell unless the previous instruction executed is its matching ), then jump to the matching ) if the current cell is zero or the next character is ).
  • -: Decrement current cell unless the previous instruction executed is its matching ), then move the pointer to the right, then jump to the matching ) if the current cell is zero or the next character is ).
  • ): Jump to the matching + (or -) if current cell is nonzero and the previous character is ).

Computational class

It is Turing complete because it can be translated from 3 cell Brainfuck (without I/O) easily. Proof is below (BF stands for 3 cell Brainfuck in the proof for convenience):

+

+ in BF can simply be translated to +) in BF.

> and <

We notice that -) in +-) is the same as -> in BF, so > is equivalent to +->, which is +)-) in +-).

Because the pointer wraps around, now that we get the translation of >, we can simply translate < by repeating > twice, that is:

+)-)+)-)

-

- is equivalent to -><. Because -) in +-) is the same as -> in BF, - can be translated to -)+)-)+)-).

[ and ]

When not before a ), + in +-) is the same as +[ in BF, so [, the same as -+[><, can be translated to -)+)-)+)-)++)-)+)-)+)-).

] can be translated to ).

Note: >< is a placeholder that does nothing to force the loop to be nonempty. If the >< doesn't exist, empty loops ([]) won't work, because it will be translated to -)+)-)+)-)+), which will do nothing because the last ) is right before a +.


The whole translation table
BF +-)
+
+)
-
-)+)-)+)-)
>
+)-)
<
+)-)+)-)
[
-)+)-)+)-)++)-)+)-)+)-)
]
)

Examples

Calcuate 65

+)+)+)+)+)+)+)+)-)+)-)+)-)++)-)+)-)+)-)+)-)+)+)+)+)+)+)+)+)+)-)+)-)-)+)-)+)-))+)-)+)

Translated from brainfuck ++++++++[>++++++++<-]>+, which sets the second cell to 65.

External resources