Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --- MAIN FUNCTION >>>
- -- Returns the length of a longest chain of a specified element in a list.
- longestElemChainLength :: (Eq a, Integral b) => a -> [a] -> b
- longestElemChainLength _ [] = 0
- longestElemChainLength elem list = maximum (chainsLengths elem list)
- --- <<< MAIN FUNCTION
- chainsLengths :: (Eq a, Integral b) => a -> [a] -> [b]
- chainsLengths _ [] = []
- chainsLengths elem list@(x : xs)
- | x /= elem = chainsLengths elem xs
- | otherwise = n : chainsLengths elem listWithoutFirstZeroes
- where
- n = numberOfFirstElems elem list
- listWithoutFirstZeroes = removeNFirstElems n list
- numberOfFirstElems :: (Eq a, Num b) => a -> [a] -> b
- numberOfFirstElems _ [] = 0
- numberOfFirstElems elem list@(x : xs)
- | x /= elem = 0
- | otherwise = 1 + numberOfFirstElems elem xs
- removeNFirstElems :: (Integral a) => a -> [b] -> [b]
- removeNFirstElems _ [] = []
- removeNFirstElems n list@(x : xs)
- | n == 0 = list
- | otherwise = removeNFirstElems (n -1) xs
Advertisement
Add Comment
Please, Sign In to add comment