summaryrefslogtreecommitdiff
path: root/h13.hs
diff options
context:
space:
mode:
authorJoe Zhao <ztuowen@gmail.com>2015-03-16 23:10:05 +0800
committerJoe Zhao <ztuowen@gmail.com>2015-03-16 23:10:05 +0800
commit11a5fd38018498a7b7feb0e392ac36003b0440ac (patch)
tree30cdac4d89f448304ee962c4345bd67d59571bfb /h13.hs
parent7f77f812350e8fb1687343faa17cf23d797883d5 (diff)
downloadh99-11a5fd38018498a7b7feb0e392ac36003b0440ac.tar.gz
h99-11a5fd38018498a7b7feb0e392ac36003b0440ac.tar.bz2
h99-11a5fd38018498a7b7feb0e392ac36003b0440ac.zip
+12 +13 +14 +15
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