# python 3
# compress brainfuck program by encoding each two-command group into a single character
# programs with an odd number of commands will have a '.' prepended to the front
# results in 50% compression
counter = h = v = 0
prog = comp = ""
cs = "><+-,.[]" # command set
load_list = "0@123456!789" + "abcdefghijklmnopqrstuvwxyz" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
# '><' = '@', '<>' = '!' should not happen very often
f = open(input("bf file: "), 'r')
while True:
nextch = f.read(1)
if(not nextch):
f.close()
break
if(nextch in cs):
prog += (nextch)
if(len(prog) % 2 == 1):
prog = '.' + prog # make program list even
print()
for i in range(0, int(len(prog)), 2):
comp += load_list[cs.find(prog[i]) * 8 +
cs.find(prog[i + 1])]
print(comp)
'''
H/V > < + - , . [ ]
> 0 (!) e m u C K S
< (@) 7 f n v D L T
+ 1 8 g (o) w E M U
- 2 9 (h) p x F N V
, 3 a i q (y) G O W
. 4 b j r z H P X
[ 5 c k s A I Q Y
] 6 d l t B J (R) Z
'''
Comments