Sharp flat Python interpreter
Jump to navigation
Jump to search
- The title of this article is not correct because of technical limitations. The correct title is actually #b Python interpreter.
The following program is an interpreter written in Python for #b (a.k.a. Sharp flat), by the author of that esolang (User:None1).
import sys
def bf(code):
s1=[]
s2=[]
matches={}
tape=[0]*1000000
for i,j in enumerate(code):
if j=='[':
s1.append(i)
if j==']':
m=s1.pop()
matches[m]=i
matches[i]=m
cp=0
p=0
while cp<len(code):
if code[cp]=='+':
tape[p]=(tape[p]+1)%256
if code[cp]=='-':
tape[p]=(tape[p]-1)%256
if code[cp]==',':
tape[p]=ord(sys.stdin.read(1))%256
if code[cp]=='.':
print(chr(tape[p]),end='')
if code[cp]=='<':
p-=1
if code[cp]=='>':
p+=1
if code[cp]=='[':
if not tape[p]:
cp=matches[cp]
if code[cp]==']':
if tape[p]:
cp=matches[cp]
cp+=1
def sf(code):
b=''
d={'bbb': '+', 'bb#': '>', 'b#b': ',', '#bb': '[', 'b##': ']', '#b#': '.', '##b': '<', '###': '-'}
code=''.join(list(filter(lambda x:x!='\n',code)))
for i in range(len(code)//3):
s=''.join([('#' if ord(code[3*i+j])%2 else 'b') for j in range(3)])
b+=d[s]
bf(b)
sf(sys.stdin.read())