日本情報オリンピック 第5回 予選 第2問目

もっと大きなモノを書いてみたいという欲求がムクムクと。

module Main (main) where

import System
import Control.Monad
import Data.List (lookup, tails)

makeAssocList :: [String] -> [(String,String)]
makeAssocList = map (listToTuple . words)
    where
        listToTuple (x:y:_) = (x,y)

convert :: [String] -> [(String,String)] -> String
convert xs assoc = concatMap (flip convert' assoc) xs
    where
        convert' :: String -> [(String,String)] -> String
        convert' key assoc = case lookup key assoc of
                                 Nothing -> key
                                 Just v  -> v

main :: IO () main = do
    (inputFile:_) <- getArgs
    contents <- liftM lines $ readFile inputFile
    let
         tblLen = read $ head contents
         tbl = take tblLen $ tail contents
         tmp = drop tblLen $ tail contents
         dataLen = read $ head tmp
         datas = map (filter (/= ' ')) $ take dataLen $ tail tmp
    writeFile "output.txt" $ convert datas (makeAssocList tbl)