Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import Control.Monad
- import Data.List
- rom2num :: String -> Maybe Integer
- rom2num roman = return roman >>= liftM (groupBy (<)) . sequence . map romanLetter >>= liftM sum . sequence . map parseRoll
- where
- parseRoll [ num ] = Just num
- parseRoll [ pre, num ] = Just (num - pre)
- parseRoll _ = Nothing
- romanLetter x = lookup x $ zip "IVXLCDM" [1, 5, 10, 50, 100, 500, 1000]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement