Haskell Quiz/DayRange/Solution Jethr0
< Haskell Quiz | DayRange
Jump to navigation
Jump to search
Revision as of 17:51, 16 December 2006 by JohannesAhlmann (talk | contribs)
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]