mirror of
https://github.com/Noratrieb/idris-learning.git
synced 2026-01-14 13:05:02 +01:00
34 lines
1 KiB
Idris
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
|