Mar 07 2014

気まぐれで anarchy golf など

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 はトップレベル定義したまま出しちゃった。 というかもっとキレイに書けるような関数が絶対あると思うんだけど。