None1/BCT Python

From Esolang
Jump to navigation Jump to search

BCT interpreter in Python, prints debug information since it has no I/O.

from time import sleep


class CyclicList(list):
    def __getitem__(self, x):
        return super().__getitem__(x % self.__len__())


code = CyclicList(map(int, input("Code: ")))
data = list(map(int, input("Data-string: ")))
ip = 0
while 1:
    print(f'IP: {ip%len(code)}\t Data-string: {"".join(map(str,data))}')
    if not code or not data:
        print("Halt!")
        break
    op = code[ip]
    if op:
        if data[-1]:
            data.append(code[ip + 1])
        ip += 2
    else:
        data.pop()
        ip += 1
    sleep(0.2)