idris-learning/chapter2/Exercises.idr
2021-07-08 16:46:51 +02:00

34 lines
1 KiB
Idris

module Exercises
-- 1, 2, 3, 4, 5
palindrome : Nat -> String -> Bool
palindrome n str = let halfs = splitHalf (toLower str) in
length str > n && fst halfs == (reverse (snd halfs))
where
halfLength : String -> Nat
halfLength str = (length str) `div` 2
splitHalf : String -> (String, String)
splitHalf str = let firstHalf = substr 0 (halfLength str) str
startIndex = if even (length str) then halfLength str else halfLength str + 1
secondHalf = substr startIndex (length str) str in
(firstHalf, secondHalf)
where
even : Nat -> Bool
even n = n `mod` 2 == 0
-- 6
counts : String -> (Nat, Nat)
counts str = (length (words str), length str)
-- 7
top_ten : Ord a => List a -> List a
top_ten xs = take 10 (reverse (sort xs))
-- 8
over_length : Nat -> List String -> Nat
over_length n xs = let filtered = filter (\str => length str > n) xs in
length filtered
-- 9
-- not now