14 lines
534 B
Haskell
14 lines
534 B
Haskell
import Data.List (intercalate)
|
|
|
|
extractRange :: [Int] -> String
|
|
extractRange = intercalate "," . f
|
|
where f :: [Int] -> [String]
|
|
f (x1 : x2 : x3 : xs) | x1 + 1 == x2 && x2 + 1 == x3
|
|
= (show x1 ++ '-' : show xn) : f xs'
|
|
where (xn, xs') = g (x3 + 1) xs
|
|
g a (n : ns) | a == n = g (a + 1) ns
|
|
| otherwise = (a - 1, n : ns)
|
|
g a [] = (a - 1, [])
|
|
f (x : xs) = show x : f xs
|
|
f [] = []
|