blob: 8207e5e7001bd428c47bfe052b157afb7ebbf62b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
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
|