summaryrefslogtreecommitdiff
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
parent7f77f812350e8fb1687343faa17cf23d797883d5 (diff)
downloadh99-11a5fd38018498a7b7feb0e392ac36003b0440ac.tar.gz
h99-11a5fd38018498a7b7feb0e392ac36003b0440ac.tar.bz2
h99-11a5fd38018498a7b7feb0e392ac36003b0440ac.zip
+12 +13 +14 +15
-rw-r--r--h12.hs8
-rw-r--r--h13.hs15
-rw-r--r--h14.hs10
-rw-r--r--h15.hs11
4 files changed, 44 insertions, 0 deletions
diff --git a/h12.hs b/h12.hs
new file mode 100644
index 0000000..9b1b50e
--- /dev/null
+++ b/h12.hs
@@ -0,0 +1,8 @@
+data ListItem a = Single a | Multiple a Int
+ deriving (Show)
+
+decodeModified :: [ListItem a] -> [a]
+decodeModified = concatMap decodeHelper
+ where
+ decodeHelper (Single a) = [a]
+ decodeHelper (Multiple a b) = replicate b a
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
diff --git a/h14.hs b/h14.hs
new file mode 100644
index 0000000..e7ad73d
--- /dev/null
+++ b/h14.hs
@@ -0,0 +1,10 @@
+import Control.Applicative
+
+dupli :: [a] -> [a]
+dupli = concatMap (replicate 2)
+
+dupli' xs = concat [ [x,x] | x <- xs ]
+
+dupli'' = (<**> [id,id])
+
+dupli''' = foldr ((.) <$> (:) <*> (:)) []
diff --git a/h15.hs b/h15.hs
new file mode 100644
index 0000000..a8f84c1
--- /dev/null
+++ b/h15.hs
@@ -0,0 +1,11 @@
+import Control.Monad
+
+repli :: [a] -> [a]
+repli xs n = concatMap (replicate n) xs
+
+repli' = flip $ concatMap . replicate
+
+repli'' xs n = xs >>= replicate n
+
+repli''' [] _ = []
+repli''' (x:xs) n = foldr (const (x:)) (repli xs n) [1..n]