summaryrefslogtreecommitdiff
path: root/h13.hs
blob: ec0a39510663afa2ebd571754d50b9eee668ece1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
data ListItem a = Single a | Multiple a Int
    deriving (Show)

encode :: Eq a => [a] -> [(a,Int)]
encode = foldr encodeHelper [] 
    where 
        encodeHelper a p@((x,c):ps) | x==a = (a,c+1):ps
        encodeHelper a p = (a,1):p

encodeDirect :: Eq a => [a] -> [ListItem a]
encodeDirect = map encodeHelper . encode
    where
        encodeHelper (a,c)
            | c>1 = Multiple a c
            | otherwise = Single a