54 lines
1.3 KiB
Haskell
54 lines
1.3 KiB
Haskell
module Exercise where
|
|
|
|
stops :: String
|
|
stops = "pbtdkg"
|
|
|
|
vowels :: String
|
|
vowels = "aeiou"
|
|
|
|
stopVowelStop :: [(Char, Char, Char)]
|
|
stopVowelStop = filter p [(x, y, z) | x <- stops, y <- vowels, z <- stops]
|
|
where p (a, _, _) = a == 'p'
|
|
|
|
seekritFunc :: String -> Double
|
|
seekritFunc x = (/) (fromIntegral (sum (map length (words x)))) (fromIntegral (length (words x)))
|
|
|
|
myAnd :: [Bool] -> Bool
|
|
myAnd = foldr (&&) True
|
|
|
|
myOr :: [Bool] -> Bool
|
|
myOr = foldr (||) False
|
|
|
|
myAny :: (a -> Bool) -> [a] -> Bool
|
|
myAny f = myOr . map f
|
|
|
|
myElem :: Eq a => a -> [a] -> Bool
|
|
myElem x = foldr (\y z -> z || (y == x)) False
|
|
|
|
myElem' :: Eq a => a -> [a] -> Bool
|
|
myElem' needle = any (\x -> x == needle)
|
|
|
|
myReverse :: [a] -> [a]
|
|
myReverse = foldl (flip (:)) []
|
|
|
|
myMap :: (a -> b) -> [a] -> [b]
|
|
myMap f = foldr (\x y -> (f x) : y) []
|
|
|
|
myFilter :: (a -> Bool) -> [a] -> [a]
|
|
myFilter f = foldr (\x xs -> if f x then x : xs else xs) []
|
|
|
|
squish :: [[a]] -> [a]
|
|
squish = foldr (++) []
|
|
|
|
squishMap :: (a -> [b]) -> [a] -> [b]
|
|
squishMap f xs = foldr (++) [] (map f xs)
|
|
|
|
squishAgain :: [[a]] -> [a]
|
|
squishAgain = squishMap id
|
|
|
|
myMaximumBy :: (a -> a -> Ordering) -> [a] -> a
|
|
myMaximumBy f (z:zs) = foldl (\x y -> if (f x y) == GT then x else y) z zs
|
|
|
|
myMinimumBy :: (a -> a -> Ordering) -> [a] -> a
|
|
myMinimumBy f (z:zs) = foldl (\x y -> if (f x y) == LT then x else y) z zs
|