AA 折れ線グラフ問題
>
>OSS web 今日の一行
>。
>
>import List
import System.Environment
import System.Environment
levels = unfoldr f . ((,) 0)
where f (n, 'R':rest) = Just ((n, '/'), (n+1, rest))
f (n, 'F':rest) = Just ((n-1, '\\'), (n-1, rest))
f (n, 'C':rest) = Just ((n, '_'), (n, rest))
f _ = Nothing
visualize ls l = map (\l' -> if l == fst l' then snd l' else ' ') ls
plot str = unlines $ map (visualize ls) [maxl, maxl-1 .. minimum ls']
where ls = levels str
ls' = fst $ unzip ls
maxl = maximum ls'
test = "RCRFCRFFCCRFFRRCRRCCFRFRFF"
main = getArgs >>= mapM_ (\l -> putStrLn l >> putStrLn (plot l)) >
>こんなところでしょうか。あんまり面倒なことはしないで素直に解いています。ところで > >他の解答を見てみると、アルゴリズム自体は >花谷さんの答え >と同じだなぁ。ありきたりですね。って mapAccumL なんていう関数もありましたねぇ……。言われないと思い出せてません。とほほ。 >