Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import Control.Monad
- import Control.Applicative
- main = do
- [_, numWords, numCases] <- fmap ((map read) . words) $ getLine :: IO [Int]
- (known, rest) <- fmap ((splitAt numWords) . lines) $ getContents
- forM_ [1..numCases] (\caseNum -> do
- let possibleWords word = filter (`elem` known) (permuteWord word)
- allPossibles = map possibleWords rest
- putStrLn $ "Case #" ++ show caseNum ++ ": " ++ show (length $ allPossibles !! (caseNum - 1))
- )
- -- I COULD HAVE JUST REPLACED THE PARENTHESES WITH BRACKETS
- -- AND TREATED THEM AS REGULAR EXPRESSIONS
- permuteWord :: String -> [String]
- permuteWord [] = [""]
- permuteWord word | '(' `notElem` word = [word]
- | otherwise = let (first, _:rest) = break (== '(') word
- (group, _:rest') = break (== ')') rest
- in [((first ++ [a]) ++) | a <- group] <*> (permuteWord rest')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement