"ACM国際大学対抗プログラミングコンテスト" の問題を解こう
http://www.acm-japan.org/past-icpc/domestic2006/contest/all_ja.html の Problem B を (ものすごく適当に) 解いてみる。
これ、もしかしたら Arrow を使うとすごくきれいに書けるんじゃないだろうか。けどお腹痛いから細かいことを考えられない。
うむ、とりあえず関数と引数の名前が無駄に長すぎたね。
import System import Data.List type Container = Char strageLine :: [Container] -> [([Container],[Container])] strageLine containers = do nth <- [1..length containers - 1] return $ splitAt nth containers reversalLine :: [Container] -> [[Container]] reversalLine containers = [containers, reverse containers] depatureLine :: ([Container],[Container]) -> [[Container]] depatureLine (containers1, containers2) = [containers1++containers2, containers2++containers1] organize :: [Container] -> [[Container]] organize containers = do (a,b) <- strageLine containers aa <- reversalLine a bb <- reversalLine b depatureLine (aa, bb) main = do (arg:_) <- getArgs mapM_ print $ nub $ organize arg