http://golf.shinh.org/p.rb?bars
AtCoder Regular Contest ならそのままB問題として使われそうだなって思いました。
cympfh 307 0.0433 14/03/07 01:18:59 0B / ?B / ?B
Python 132 の倍以上なので、ちゃんと頑張らないと、 Haskellの面汚しになりそう。 でも素直に言えばSuccessしただけで満足。
圧縮前のコードは下。
main = do
xs<-getLine>>=return.map read.words
let m = maximum xs
putStrLn $ unlines [ trim $ ins (yoko xs i) (tate xs i) | i <- [m, m-1 .. 0]]
where
yoko xs i =
[ if xs!!j == i then "__" else " "
| j <- [0 .. length xs-1]]
tate xs i =
[ if xs' !! j > i || xs' !! (j+1) > i then "|" else " "
| j <- [0 .. length xs]]
where xs' = 0:xs++[0]
ins [] [x] = x
ins (x:xs) (y:ys) = y ++ x ++ ins xs ys
trim = reverse . dropWhile (== ' ') . reverse
yoko, tate, trim はインライン展開して提出したけど ins はトップレベル定義したまま出しちゃった。 というかもっとキレイに書けるような関数が絶対あると思うんだけど。