summaryrefslogtreecommitdiff
path: root/H13.hs
diff options
context:
space:
mode:
Diffstat (limited to 'H13.hs')
-rw-r--r--H13.hs15
1 files changed, 15 insertions, 0 deletions
diff --git a/H13.hs b/H13.hs
new file mode 100644
index 0000000..ec0a395
--- /dev/null
+++ b/H13.hs
@@ -0,0 +1,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