Guest User

Untitled

a guest
Mar 21st, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.70 KB | None | 0 0
  1. import qualified Data.List as L
  2.  
  3. l1 = [(1, 3), (2, 4), (5, 7), (6, 8), (10, 15)]
  4. l2 = [(6, 8), (1, 9), (2, 4), (4, 7)]
  5.  
  6. sort' :: Ord b => [(b, b1)] -> [(b, b1)]
  7. sort' = L.sortOn fst
  8.  
  9. mergeIntervals [] = []
  10. mergeIntervals ((s, e):xs) = fn ((s,e):[]) $ xs
  11. where
  12. fn stack [] = stack
  13. fn stack@((ss,se):st) ((ns,ne):ys) = if (ns > se)
  14. then fn ((ns, ne):stack) ys
  15. else fn ((ss, max se ne):st) ys
  16.  
  17. main :: IO ()
  18. main = do
  19. putStrLn ("mergeIntervals " ++ show l1 ++ " = " ++ show (mergeIntervals $ sort' l1))
  20. putStrLn ("mergeIntervals " ++ show l2 ++ " = " ++ show (mergeIntervals $ sort' l2))
Add Comment
Please, Sign In to add comment