Haskell練習
すごいH本
- 作者: Miran Lipovača,田中英行,村主崇行
- 出版社/メーカー: オーム社
- 発売日: 2012/05/23
- メディア: 単行本(ソフトカバー)
- 購入: 11人 クリック: 464回
- この商品を含むブログ (24件) を見る
を買ってIOまで一通り読んだので書いて覚えていこうと。
Codeforcesの簡単な問題をいくつか解いて入出力に慣れていく予定。
練習1
http://www.codeforces.com/problemset/problem/194/A
ソース
solve [a,b] | b `div` a >= 3 = 0 | otherwise = a - (b `mod` a) main = interact $ show . solve . map (read::String->Int) . words
空白区切りされた数字を読み込むにはwordsでStringのリストにしたものをreadで変換すればいいっぽい。
interactを使うと実行するたびにEOFを入力しないといけなくてめんどい。
練習2
http://www.codeforces.com/problemset/problem/208/A
solve [] ('W':'U':'B':xs) = solve [] xs solve ret ('W':'U':'B':xs) = reverse ret:solve [] xs solve ret (x:xs) = solve (x:ret) xs solve ret [] = reverse ret : [] main = do line <- getLine putStrLn (unwords $ solve [] line)
パターンマッチ便利す。
練習3
http://www.codeforces.com/problemset/problem/205/A
solve::Int -> Int -> [(Int,Int)] -> String solve ret tmp (x:xs) | tmp > (snd(x)) = solve (fst(x)) (snd(x)) xs | tmp == (snd(x)) = solve (-1) tmp xs | otherwise = solve ret tmp xs solve ret _ [] | ret == (-1) = "Still Rozdil" | otherwise = show ret main = do num <- getLine args <- getLine let l = zip [1..] $ map (read::String->Int) $ words args putStrLn(solve 0 (2^30) l)
IntからStringへの変換はshowを使えば良い。無限リストを使って1,2,3,...というindexを
付加するのが楽なのもよい。
おわりに
結構面白いかもしれない。ただTLEやらMLEを見積るのが難しいのと、デバッグしにくいのは
難点かもなぁ。
->http://d.hatena.ne.jp/kazu-yamamoto/20120606/1338957783
こんなんありました。