Advertisement
Guest User

Untitled

a guest
Oct 10th, 2019
190
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import Data.List (intercalate)
  2.  
  3. data Interval = Interval Int Int
  4.  
  5. instance Show Interval where
  6.     show (Interval start end)
  7.         | start == end = show start
  8.         | otherwise    = show start ++ "-" ++ show end
  9.  
  10. singletonInterval :: Int -> Interval
  11. singletonInterval x = Interval x x
  12.  
  13. extendIntervals :: Int -> [Interval] -> [Interval]
  14. extendIntervals val [] = [singletonInterval val]
  15. extendIntervals val intervals
  16.     | firstIntervalStart - val == 1 = Interval val firstIntervalEnd : otherIntervals
  17.     | otherwise                     = singletonInterval val : intervals
  18.     where Interval firstIntervalStart firstIntervalEnd = head intervals
  19.           otherIntervals                               = tail intervals
  20.  
  21. convertToIntervals :: [Int] -> [Interval]
  22. convertToIntervals = foldr extendIntervals []
  23.  
  24. main = do
  25.     input <- getContents
  26.     putStrLn $ intercalate "," . map show . convertToIntervals . map read . words $ input
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement