Personal tools

Haskell Quiz/DayRange/Solution Jethr0

From HaskellWiki

Jump to: navigation, search


-- > dayRange [1,2,3,6,7]
-- "Mon-Wed, Sat, Sun"
dayRange = sepComma . map range . map (map toWeekday) . groupAscend . sort
    where sepComma    = concat . intersperse ", "
          toWeekday x = weekdays!!(x-1)
          range xs | length xs < 3 = sepComma xs
                   | otherwise     = head xs ++ "-" ++ last xs
          weekdays = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]
 
groupAscend (x:xs) = together $ foldl ascend ([],[x]) xs
    where ascend (done,curr) e = if e == (last curr)+1 then (done,         curr++[e])
                                                       else (done++[curr], [e])
          together (a,b) = a++[b]