Google Code Jam/Saving The Universe

From HaskellWiki
< Google Code Jam
Revision as of 13:32, 18 July 2008 by Paolino (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

import Data.List rcount :: Eq a => [a] -> [a] -> Integer rcount names qs = count names qs where count _ [] = 0 count [n] qs = let qs' = dropWhile (/= n) qs in if null qs' then 0 else 1 + count names qs' count ns (q:qs) = count (delete q ns) qs parseCase [] = Nothing parseCase (n:xs) = let (ns,q:rs) = splitAt (read n) xs (qs,rs') = splitAt (read q) rs in Just ((ns,qs),rs') type Names = [String] type Queries = [String] parseCases :: String -> [(Names,Queries)] parseCases x = let (n:ts) = lines x in take (read n) . unfoldr parseCase $ ts main = do ts <- parseCases `fmap` getContents flip mapM_ (zip [1..] ts) $ \(i,(ns,qs)) -> do putStr $ "Case #" ++ show i ++ ": " print $ rcount ns qs