Le Run-length encoding, que j’abrégerai RLE, est grosso-modo un algorithme de compression de données créé à la base pour réduire la taille des images. Il consiste à indiquer pour chaque même élément le nombre de répétitions consécutives de ce dernier.
Une chaine de caractères comme celle-ci : WWWWWBWWWWWWBBBWWWWWWWWWBWWWWWWWW33′, sera donc après passage dans une fonction de compression RLE comme ceci : 5W1B6W3B9W1B8W23.
Ayant vu quelques personnes sur IRC s’amuser à implémenter leurs versions de cet algorithme dans différents langages, je me suis dit qu’il serait peut-être sympa de m’y essayer moi aussi ^^
Et voilà mon résultat :
#!/usr/bin/env python
#-*- encoding: utf-8 -*-
from itertools import groupby
to_rle_convert = 'WWWWWBWWWWWWBBBWWWWWWWWWBWWWWWWWW33'
def rle(string):
return (''.join([str(len(list(group)))+name
for name, group in groupby(string)]))
rle_converted = rle(to_rle_convert)
print rle_converted
def rle_decoder(string):
return ”.join([int(elem)*string[id+1]
for id, elem in enumerate(string) if id%2 == 0])
print rle_decoder(rle_converted)
Si je mets mon code à disposition ici et dans mon portfolio, c’est bien entendu parce que j’attends de vous que vous me donniez vos remarques/suggestions/conseils avisés
Loading ...

