Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # See esolang wiki: https://esolangs.org/wiki/Brainf_ck for specification
- import sys
- # Code:
- def brainf_ck(code,stack):
- code=''.join(filter(lambda x:x in '+-,.[]<>',code))
- if code=='+':
- return 1
- if code=='-':
- return stack.pop()
- if code==',':
- c=sys.stdin.read(1)
- if c:
- return ord(c)
- else:
- return 0
- if code=='.':
- print(chr(stack[-1]),end='')
- return stack[-1]
- code = code.replace('>[', '(').replace(']<', ')') # Make instructions 1 byte
- parts=[]
- ip=0
- while ip<len(code):
- i=code[ip]
- if i=='+':
- parts.append('+')
- ip+=1
- if i=='-':
- parts.append('-')
- ip+=1
- if i==',':
- parts.append(',')
- ip+=1
- if i=='.':
- parts.append('.')
- ip+=1
- if i=='(':
- m=1
- t='('
- while m:
- ip+=1
- if code[ip]=='(':
- m+=1
- if code[ip]==')':
- m-=1
- t+=code[ip]
- parts.append(t)
- ip+=1
- if i=='[':
- m=1
- t='['
- while m:
- ip+=1
- if code[ip]=='[':
- m+=1
- if code[ip]==']':
- m-=1
- t+=code[ip]
- parts.append(t)
- ip+=1
- if len(parts)==1:
- if code[0]=='(':
- stack.append(brainf_ck(code[1:-1].replace('(','>[').replace(')',']<'),stack))
- return stack[-1]
- else:
- while stack and stack[-1]:
- brainf_ck(code[1:-1].replace('(','>[').replace(')',']<'),stack)
- return 0
- else:
- su=0
- for i in parts:
- k=brainf_ck(i.replace('(','>[').replace(')',']<'),stack)
- su+=k
- su&=255
- return su
- # Usage:
- brainf_ck('<code>',[])
- # You may extend Python's recursion limit if you want:
- sys.setrecursionlimit(10000)
Advertisement
Add Comment
Please, Sign In to add comment