Ruck

From Esolang
Jump to navigation Jump to search

Ruck is an esolang invented by User:None1, it has one extra command than Minimized BF: < and its tape has infinite size, making it Turing complete.

Examples

Hello World (unoptimized)

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

Cat program


Truth Machine

This program works on the original language (Minimized BF) as well, and since non-interactive I/O is used, the program doesn't print 1 when the input is 1, instead, it runs an infinite loop which exausts infinite memory by rewriting all the cells with the ASCII values of 1, which is 49.

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++[>+++++++++++++++++++++++++++++++++++++++++++++++++]

Implementations

The following Python-script is an interpreter

tape = [0]
for i in range(0, 65536): # Expand
    tape.append(0)
pointer = 32768
prgm = input('>Ruck ')
init = input('>i ')
for i in range(32768, len(init)+32768): # Expand
    tape[i] = ord(init[i-32768]) # Expand
# 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
    elif prgm[inst] == ">":
        pointer += 1
    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 = 32768 # Expand
while tape[pointer]:
    print(chr(tape[pointer]), end="")
    pointer += 1

64K implementation, but it can be expanded.