Minimized BF

From Esolang
Jump to navigation Jump to search

Minimized BF is brainfuck with only 4 commands +>[], created by User:None1. Despite the fact that it has only 4 commands, it's still very powerful and almost Turing complete.

Memory

This esolang runs on a circular tape with 256 8-bit cells, overflow and underflow wraps around.

Commands

Minimized BF doesn't need the - command because 255 + commands is equivalent to one - command. It doesn't need the < command, because 255 > commands is equivalent to one < command.

I/O

Unlike brainfuck, this esolang has no commands for I/O, but it still has I/O. Before a program runs, the input is read from a file and into the tape clockwise as a C-Style string, starting from the pointer. After the program terminates, the tape starting from pointer's initial position clockwise as a C-Style string is written into the output file.

Example Programs

Hello World (unoptimized)

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>
++++++++++++++++++++++++++++++++>
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>
+++++++++++++++++++++++++++++++++>

Cat Program


Truth Machine

See the page Ruck for a Truth Machine in Minimized BF.

Implementations

The following Python script is an interpreter.

tape = [0]
for i in range(0, 256):
    tape.append(0)
pointer = 0
prgm = input('>mBF ')
init = input('>i ')
for i in range(0, len(init)):
    tape[i] = ord(init[i])
# Executes the program
loop_table = {}
loop_stack = []
for ip, inst in enumerate(prgm):
    if inst == "[":
        loop_stack.append(ip)
    elif inst == "]":
        loop_beginning_index = loop_stack.pop()
        loop_table[loop_beginning_index] = ip
        loop_table[ip] = loop_beginning_index
inst = 0
while inst < len(prgm):
    if prgm[inst] == "+":
        tape[pointer] += 1
        tape[pointer] %= 256
    elif prgm[inst] == ">":
        pointer += 1
        pointer %= 256
    elif prgm[inst] == "[":
        if not tape[pointer]:
            inst = loop_table[inst]
    elif prgm[inst] == "]":
        if tape[pointer]:
            inst = loop_table[inst]
    else: pass
    inst += 1
pointer = 0
while tape[pointer]:
    print(chr(tape[pointer]), end="")
    pointer += 1