Skip to content

Instantly share code, notes, and snippets.

@zeffii
Created September 11, 2013 13:11
Show Gist options
  • Save zeffii/6523349 to your computer and use it in GitHub Desktop.
Save zeffii/6523349 to your computer and use it in GitHub Desktop.
'''text encoder'''
'''
encoding first histogram
then lopsided tree
then encode
'''
sentence = 'abcdabac'
sigma = ['a','b','c','d']
alpha_dict = {
'a': [0],
'b': [1,0],
'c': [1,1,0],
'd': [1,1,1]
}
reverse_alpha_dict = {tuple(v):k for k,v in alpha_dict.items()}
def encode(sentence, sigma, alpha_dict, encode=[]):
for s in sentence:
bits = alpha_dict[s]
encode.extend(bits)
return encode
encoded = encode(sentence, sigma, alpha_dict)
print(encoded)
# [0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0]
def decode(message, reverse_alpha_dict):
ret_message = []
piv = 0
leng = 1
while(True):
pos = tuple(message[piv: piv+leng])
ret = reverse_alpha_dict.get(pos, None)
if not ret:
leng+=1
else:
ret_message.append(ret)
piv += leng
leng = 1
if piv+leng > len(message):
break
return ''.join(ret_message)
message = [0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0]
returned = decode(message, reverse_alpha_dict)
print(returned)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment