import Data.Char import Data.List main :: IO() main = do print $ task1 [(-1,1), (2,2), (0,-3)] print $ task2 "Hi how are you Today" print $ task3 8128 print $ take 3 bonusTask3 print $ task4 [1,2,1,3,1,4] 1 print $ task5 [(0,1),(0,1),(0,1)] [True, False, True] print $ task6 [0,0,1,2,2,2,3,4] print $ task6' [0,0,1,2,2,2,3,4] -- Task 1 task1 :: Ord a => [(a, a)] -> (a, a) task1 ps = (minimum (map fst ps), maximum (map snd ps)) -- Task 2 task2 :: String -> Int task2 str = length [word | word@(c:_) <- words str, isUpper c] -- Task 3 task3 :: Int -> Bool task3 n = n == sum [d | d <- [1..n-1], n `mod` d == 0] bonusTask3 :: [Int] bonusTask3 = filter task3 [1..] -- Task 4 task4 :: Eq a => [a] -> a -> [Int] task4 xs x = [i | (xi, i) <- zip xs [0..], xi == x] -- Task 5 task5 :: [(a, a)] -> [Bool] -> [a] task5 xs choice = map (\ ((f, s), c) -> if c then f else s) (zip xs choice) task5' :: [(a, a)] -> [Bool] -> [a] task5' xs choice = [if c then f else s | ((f, s), c) <- zip xs choice] -- Task 6 task6 :: Eq a => [a] -> [a] task6 xs = [x | (x:_) <- group xs] task6' :: Eq a => [a] -> [a] task6' = foldr (\ x rs -> if null rs then [x] else if x == head rs then rs else x : rs) []