We are currently working on new rules for what content should and shouldn't be allowed on this website, and are looking for feedback! See Esolang:2026 topicality proposal to view and give feedback on the current draft.

Dranoer

From Esolang
Jump to navigation Jump to search

Dranoer (Draw but not erase) is an esolang by User:ChuckEsoteric08.

Description

It uses a binary tape unbounded in both directions. Program runs in an implicit loop, it has these instructions:

  • 1 - Set current cell to 1. If the cell is already 1 do nothing
  • > - Move tape pointer to the right
  • < - Move tape pointer to the left
  • { - If current cell is 0 jump to matching }
  • ( - If current cell is 1 jump to matching )
  • }, ) - NOPs, only used as targets for if statements

Optional I/O commands:

  • * - input an ASCII character and store it as a binary in the current cell and the next 7 cells (whether big or little endian depends on implementation)
  • ! - output current cell as well as the next 7 cells as an ASCII character

Computational class

Dranoer is Turing-complete. One way to do this is by simulating binary Turing machine without ability to set 1 to 0 (which is still Turing-complete for the same reason as brainfuck minus - and Wang program without erase instruction). After the cell there would be a group of binary strings of equal lengths, with a single bit being 1 which repressents the statee, with tape pointer pointing at the start of one of these grpups. A cell with the value B thus looks like that (with three states as an example):

[1][B] [1][0][0] [0][1][0] [0][0][1]

That cell with the value 1 here is only needed to show that it is initialized. Program starts with initialization:

(
 init
)

It initializes all cells like it is shown above and then pointer is moved to the initial state after the current cell. Then it checks what current state is:

>>>{
 state transition, moves to three cells after the start of the group representing the next state
 }<<<

State transition first needs to move pointer to B and check if it a is correct value. If state transition moves the pointer it should check if cell left of B is 0, and if it is then it should be initialized. As seen in the proof (...) is used only a few times so it is possible to remove it, though it makes the program larger.

See also