Guest User

RLE 2D array encoding/decoding

a guest
May 31st, 2015
217
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 0.89 KB | None | 0 0
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3.  
  4. import re
  5. from itertools import groupby
  6.  
  7.  
  8. def encode_rle(level):
  9.     return '\n'.join(
  10.         [
  11.             ''.join(
  12.                 [key + str(len(list(group))) for key, group in groupby(row)]
  13.             ) for row in level
  14.         ]
  15.     )
  16.  
  17.  
  18. def decode_rle(level):
  19.     decoded_level = []
  20.     for row in level.split('\n'):
  21.         decoded_row = []
  22.         for elt, k in re.findall(r'([A-Za-z_]+)(\d+)', row):
  23.             decoded_row.extend([elt] * int(k))
  24.         decoded_level.append(decoded_row)
  25.     return decoded_level
  26.  
  27.  
  28. level = [
  29.     ['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'c', 'a', 'c', 'c', 'b', 'b'],
  30.     ['b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'c', 'c', 'c', 'a', 'a'],
  31.     ['a', 'c', 'c', 'c', 'b', 'c', 'a', 'b', 'a', 'a', 'a', 'b', 'b', 'c']
  32. ]
  33.  
  34. enc = encode_rle(level)
  35. dec = decode_rle(enc)
  36.  
  37. assert dec == level
Advertisement
Add Comment
Please, Sign In to add comment