ICPC: Problem A Keitai Message
みんなやってて楽しそうだったからやりました。Parsecでやっつ系。
import Text.ParserCombinators.Parsec as Parsec key = [cycle ['.',',','!','?',' '], cycle ['a','b','c'], cycle ['d','e','f'], cycle ['g','h','i'], cycle ['j','k','l'], cycle ['m','n','o'], cycle ['p','q','r','s'], cycle ['t','u','v'], cycle ['w','x','y','z']] parse str = case Parsec.parse keitaiParser "keitai" str of Left err -> error $ show err Right xs -> map ((\(x,y) -> (key !! (read [x] - 1)) !! (y - 1)) . (\x -> (head x, length x))) $ filter ("" /=) xs keitaiParser = do optional $ skipMany1 $ many1 $ char '0' s <- many1 (noneOf "0") >>= \x -> (many1 (char '0') >> return x) <|> (return "") ss <- keitaiParser <|> return [] return $ s:ss