Guest User

Untitled

a guest
Aug 20th, 2021
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. --- MAIN FUNCTION >>>
  2. -- Returns the length of a longest chain of a specified element in a list.
  3.  
  4. longestElemChainLength :: (Eq a, Integral b) => a -> [a] -> b
  5. longestElemChainLength _ [] = 0
  6. longestElemChainLength elem list = maximum (chainsLengths elem list)
  7.  
  8. --- <<< MAIN FUNCTION
  9.  
  10. chainsLengths :: (Eq a, Integral b) => a -> [a] -> [b]
  11. chainsLengths _ [] = []
  12. chainsLengths elem list@(x : xs)
  13.   | x /= elem = chainsLengths elem xs
  14.   | otherwise = n : chainsLengths elem listWithoutFirstZeroes
  15.   where
  16.     n = numberOfFirstElems elem list
  17.     listWithoutFirstZeroes = removeNFirstElems n list
  18.  
  19. numberOfFirstElems :: (Eq a, Num b) => a -> [a] -> b
  20. numberOfFirstElems _ [] = 0
  21. numberOfFirstElems elem list@(x : xs)
  22.   | x /= elem = 0
  23.   | otherwise = 1 + numberOfFirstElems elem xs
  24.  
  25. removeNFirstElems :: (Integral a) => a -> [b] -> [b]
  26. removeNFirstElems _ [] = []
  27. removeNFirstElems n list@(x : xs)
  28.   | n == 0 = list
  29.   | otherwise = removeNFirstElems (n -1) xs
Advertisement
Add Comment
Please, Sign In to add comment