国内予選問題E

http://icpc.logos.ic.i.u-tokyo.ac.jp/icpc2006/contest/all_ja.html#section_E
遅延評価が有利になる問題の一つの例。
パーザコンビネータとあいまって
非常にHaskell向きの問題となっております。

import Control.Monad
import Text.ParserCombinators.Parsec

main = do
  [s,n] <- getLine >>= return . words
  when (s/="0") $ do
    case parse gens "" s of
      Right ss -> putStrLn [(ss ++ repeat '0') !! read n]
    main

gens = many gen >>= return . concat
gen  = count 1 upper <|> do
  n <- many1 digit
  r <- between (char '(') (char ')') gens <|> gen
  return $ concat $ replicate (read n) r

5分もかからない。
ICPCHaskellを追加すべきなのは間違いない。