parent:
b74e42d8ba93664966cd726cdd7be6df4fcd23fe
Nick Mykins <nickmykins@transfix.io>
2018-02-02T14:27:20-05:00
rename OneOrMany
diff --git a/99_problems.hs b/99_problems.hs
index 59c7e76219e123f556eeed2f69c6ca21f2d6baf6..202f90bc70bd0635b0f7e8ad3a00b4287070ce45 100644
--- a/99_problems.hs
+++ b/99_problems.hs
@@ -93,16 +93,16 @@ encode = map (\l -> (length l, head l)) . pack
-- 11. Encode runs of identical elements into custom data type
-data OneOrMany a = Multiple Int a | Single a deriving Show
+data RunOf a = Multiple Int a | Single a deriving Show
-encodeModified :: Eq a => [a] -> [OneOrMany a]
+encodeModified :: Eq a => [a] -> [RunOf a]
encodeModified = map (\l -> if length l == 1
then Single $ head l
else Multiple (length l) (head l)) . pack
-- 12. Decode a run-length encoded list
-decodeModified :: Eq a => [OneOrMany a] -> [a]
+decodeModified :: Eq a => [RunOf a] -> [a]
decodeModified [] = []
decodeModified [Single x] = [x]
decodeModified [Multiple n x] = take n $ repeat x
@@ -110,7 +110,7 @@ decodeModified (x:xs) = (decodeModified [x]) ++ (decodeModified xs)
-- 13. Directly run-length encode a list without creating sublists
-encodeDirect :: Eq a => [a] -> [OneOrMany a]
+encodeDirect :: Eq a => [a] -> [RunOf a]
encodeDirect [] = []
encodeDirect (x:xs) =
let run = span (== x) xs
@@ -140,7 +140,7 @@
-- 17. Split a list into two parts, given the length of the first part
split :: [a] -> Int -> ([a], [a])
split list n = (leftSplit enumerated, rightSplit enumerated)
- where enumerated = [x | x <- zip list [1..]]
+ where enumerated = zip list [1..]
leftSplit = map fst . takeWhile ((<= n) . snd)
rightSplit = map fst . dropWhile ((<= n) . snd)