Beschrijving

Een zeer eenvoudige manier om strings te comprimeren bestaat eruit om herhaalde karakters voor te stellen door koppels van het aantal herhalingen en het karakter zelf. Enkel opeenvolgende gelijke karakters worden samengenomen.

In deze opgave schrijven we de functies encode en decode. decode maakt de compressie van encode weer ongedaan.

encode

encode :: String -> [(Int, Char)]
encode "aabbccddeeffabcd" == [(2,'a'),(2,'b'),(2,'c'),(2,'d'),(2,'e'),(2,'f'),(1,'a'),(1,'b'),(1,'c'),(1,'d')]
encode "aabaa"            == [(2,'a'),(1,'b'),(2,'a')]
encode ""                 == []

decode

decode :: [(Int, Char)] -> String
decode [(2,'a'),(1,'b')]    == "aab"
decode (encode "aabbcccddd") == "aabbcccddd"