DetailedFuck Python interpreter
Jump to navigation
Jump to search
The following is an interpreter in Python by User:None1 for DetailedFuck.
import sys
def detailed_fuck(code):
s1=[]
s2=[]
matches={}
tape=[0]*1000000
for i,j in enumerate(code):
if j=="IF THE CELL UNDER THE MEMORY POINTER'S VALUE IS ZERO INSTEAD OF READING THE NEXT COMMAND IN THE PROGRAM JUMP TO THE CORRESPONDING COMMAND EQUIVALENT TO THE ] COMMAND IN BRAINFUCK":
s1.append(i)
if j=="IF THE CELL UNDER THE MEMORY POINTER'S VALUE IS NOT ZERO INSTEAD OF READING THE NEXT COMMAND IN THE PROGRAM JUMP TO THE CORRESPONDING COMMAND EQUIVALENT TO THE [ COMMAND IN BRAINFUCK":
m=s1.pop()
matches[m]=i
matches[i]=m
cp=0
p=0
while cp<len(code):
if code[cp]=='INCREMENT THE CELL UNDER THE MEMORY POINTER BY ONE':
tape[p]=(tape[p]+1)%256
if code[cp]=='DECREMENT THE CELL UNDER THE MEMORY POINTER BY ONE':
tape[p]=(tape[p]-1)%256
if code[cp]=='REPLACE THE CELL UNDER THE MEMORY POINTER\'S VALUE WITH THE ASCII CHARACTER CODE OF USER INPUT':
tape[p]=ord(sys.stdin.read(1))%256
if code[cp]=='PRINT THE CELL UNDER THE MEMORY POINTER\'S VALUE AS AN ASCII CHARACTER':
print(chr(tape[p]),end='')
if code[cp]=='MOVE THE MEMORY POINTER ONE CELL TO THE LEFT':
p-=1
if code[cp]=='MOVE THE MEMORY POINTER ONE CELL TO THE RIGHT':
p+=1
if code[cp]=="IF THE CELL UNDER THE MEMORY POINTER'S VALUE IS ZERO INSTEAD OF READING THE NEXT COMMAND IN THE PROGRAM JUMP TO THE CORRESPONDING COMMAND EQUIVALENT TO THE ] COMMAND IN BRAINFUCK":
if not tape[p]:
cp=matches[cp]
if code[cp]=="IF THE CELL UNDER THE MEMORY POINTER'S VALUE IS NOT ZERO INSTEAD OF READING THE NEXT COMMAND IN THE PROGRAM JUMP TO THE CORRESPONDING COMMAND EQUIVALENT TO THE [ COMMAND IN BRAINFUCK":
if tape[p]:
cp=matches[cp]
cp+=1
code=sys.stdin.read()
detailed_fuck(code.split('\n'))