Advertisement
Guest User

Untitled

a guest
Nov 24th, 2017
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.28 KB | None | 0 0
  1. import sys
  2. import readchar
  3. def block(code):
  4.     opened = []
  5.     blocks = {}
  6.     for i in range(len(code)):
  7.         c = ord(code[i])
  8.         c = c>>2&4|c&3
  9.         if c == 7:
  10.             opened.append(i)
  11.         elif c == 5:
  12.             blocks[i] = opened[-1]
  13.             blocks[opened.pop()] = i
  14.     return blocks
  15.  
  16. def parse(code):
  17.     return ''.join(c for c in code if c > ' ')
  18.  
  19. def run(code):
  20.     code = parse(code)
  21.     x = [0]
  22.     i = [0]
  23.     bf = {0: 0}
  24.     blocks = block(code)
  25.     l = len(code)
  26.     procs = (
  27.         (lambda: bf.__setitem__(x, ord(readchar()))),
  28.         (lambda: (bf[x[0]] == 0 and [bf.__setitem__(x[0], 255)] or [bf.__setitem__(x[0], bf[x[0]] - 1)])[0]),
  29.         (lambda: print(chr(bf[x[0]]), end='')),
  30.         (lambda: (bf[x[0]] == 255 and [bf.__setitem__(x[0], 0)] or [bf.__setitem__(x[0], bf[x[0]] + 1)])[0]),
  31.         (lambda: x.__setitem__(0, x[0] - 1)),
  32.         (lambda: bf[x[0]] and i.__setitem__(0, blocks[i[0]])),
  33.         (lambda: (x.__setitem__(0, x[0] + 1), bf.setdefault(x[0], 0))),
  34.         (lambda: not bf[x[0]] and i.__setitem__(0, blocks[i[0]])))
  35.     while i[0] < l:
  36.         sym = ord(code[i[0]])
  37.         sym = sym>>2&4|sym&3
  38.         procs[sym]()
  39.         i[0] += 1
  40.  
  41. f = open(sys.argv[1], 'r')
  42. code = f.read()
  43. f.close()
  44. run(code)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement