From 587948b12a312d42371b11c75c1e3046bd6d2b82 Mon Sep 17 00:00:00 2001 From: Pedro Correa Date: Wed, 2 Nov 2022 21:40:42 -0300 Subject: [PATCH] :sparkles: (haskell) added challenges directory --- Haskell/challenges/VowelCount.org | 35 +++++++++++++++++++ Haskell/challenges/descendingOrder.org | 47 ++++++++++++++++++++++++++ 2 files changed, 82 insertions(+) create mode 100644 Haskell/challenges/VowelCount.org create mode 100644 Haskell/challenges/descendingOrder.org diff --git a/Haskell/challenges/VowelCount.org b/Haskell/challenges/VowelCount.org new file mode 100644 index 0000000..70028af --- /dev/null +++ b/Haskell/challenges/VowelCount.org @@ -0,0 +1,35 @@ +* Descending Order + +[[https://www.codewars.com/kata/54ff3102c1bad923760001f3/train/haskell][Link for the challenge on codewars]] + +Return the number (count) of vowels in the given string. + +We will consider a, e, i, o, u as vowels for this Kata (but not y). + +The input string will only consist of lower case letters and/or spaces. + +#+begin_src haskell +:{ +getCount :: String -> Int +getCount xs = foldl (+) 0 [1 | v <- xs, v `elem` "aeiou"] +:} + +getCount "banana" +#+end_src + +#+RESULTS: +: Prelude> 3 + +Clear solution + +#+begin_src haskell +:{ +getCount :: String -> Int +getCount = length . filter (`elem` "aeiou") +:} + +getCount "abracadabra" +#+end_src + +#+RESULTS: +: Prelude> 5 diff --git a/Haskell/challenges/descendingOrder.org b/Haskell/challenges/descendingOrder.org new file mode 100644 index 0000000..2337120 --- /dev/null +++ b/Haskell/challenges/descendingOrder.org @@ -0,0 +1,47 @@ +* Descending Order + +[[https://www.codewars.com/kata/5467e4d82edf8bbf40000155/train/haskell][Link for the challenge on codewars]] + +Your task is to make a function that can take any non-negative integer as an argument and return it with its digits in descending order. Essentially, rearrange the digits to create the highest possible number. + +#+begin_src haskell +:{ +digs :: Integer -> [Integer] +digs 0 = [] +digs x = digs (x `div` 10) ++ [x `mod` 10] + +qsort [] = [] +qsort (x:xs) = + (qsort lower) ++ [x] ++ (qsort higher) + where + lower = [e | e <- xs, e < x] + higher = [e | e <- xs, e >= x] + +listToInt [] _ = 0 +listToInt mul (x:xs) = foldl ((x * mul) +) listToInt (mul*10) xs + +descendingOrder :: Integer -> Integer +descendingOrder x = listToInt (qsort . digs $ x) 1 +:} + +descendingOrder 42145 +#+end_src + +#+RESULTS: +: Prelude> 54421 + +Clear solution + +#+begin_src haskell +:{ +import Data.List (sort) + +descendingOrder :: Integer -> Integer +descendingOrder x = (read . reverse . sort . show) x +:} + +descendingOrder 42145 +#+end_src + +#+RESULTS: +: Prelude> 54421 -- 2.51.2