42 lines
1 KiB
Python
Executable file
42 lines
1 KiB
Python
Executable file
#!/usr/bin/env python3
|
|
|
|
import numpy as np
|
|
|
|
univers = ['a','b','c']
|
|
message = "aabababac"
|
|
|
|
def code_LZW(message, univers):
|
|
msg = message
|
|
dictionnaire = dict(zip(univers,[i for i in range (len(univers))]))
|
|
w=""
|
|
code =[]
|
|
for c in msg:
|
|
wc = w+c
|
|
if wc in dictionnaire:
|
|
w =wc
|
|
else:
|
|
code.append(dictionnaire[w])
|
|
dictionnaire[wc] = len(dictionnaire)
|
|
w = c
|
|
if w:
|
|
code.append(dictionnaire[w])
|
|
return code,dictionnaire
|
|
|
|
def decode_LZW(code,univers):
|
|
dictionnaire = dict(zip([i for i in range(len(univers))],univers))
|
|
w = dictionnaire[code.pop(0)]
|
|
msg = [w]
|
|
for k in code:
|
|
if k in dictionnaire:
|
|
entry = dictionnaire[k]
|
|
elif k == len(dictionnaire):
|
|
entry = w +w[0]
|
|
msg.append(entry)
|
|
dictionnaire[len(dictionnaire)] = w+entry[0]
|
|
w = entry
|
|
print(dictionnaire)
|
|
return ''.join(msg)
|
|
|
|
code,dictionnaire = code_LZW(message,univers)
|
|
msg = decode_LZW(code, univers)
|
|
print(code, dictionnaire, msg)
|