Haskellの勉強を兼ねた、完全に個人的な記事になっています。
関数型言語初心者なので、同じようなHaskellビギナーの参考になればいいなぁと思います。
(上級Haskellerのみなさんからアドバイスいただければ嬉しいです!)
AtCoder Beginner Contest 001
問題はこちら → AtCoder Beginner Contest 001
A問題
回答コード
main = do
h1 <- readLn
h2 <- readLn
putStrLn . show $ h1 - h2
コメント
- 標準入力を数値で受け取るには
readLn
というIOアクションを使う。 - しかし、1行ずつしか受け取れないので…ウーン……
B問題
回答コード
module Main where
import Text.Printf
main = do
meter <- readLn
if ((vvTell meter) <= 9)
then printf "0%d\n" (vvTell meter)
else printf "%d\n" (vvTell meter)
vvTell :: Int -> Int
vvTell meter
| meter < 100 = 00
| meter <= 5000 = v2
| meter >= 6000 && meter <= 30000 = v3
| meter >= 35000 && meter <= 70000 = v4
| otherwise = v5
where v2 = meter `div` 100
v3 = meter `div` 1000 + 50
v4 = ((meter `div` 1000 - 30 ) `div` 5)+80
v5 = 89
コメント
演算したいので、実際に扱いたいのは「数値」。
しかしI/Oアクションで扱えるのはString
の型なので(たぶん?)、少し苦労しました。
結果、とりあえずreadLn
で標準入力をInt
型で受け取り、そのまま計算。
出力にはprintf
を使うことにしました。
C言語系ライクなprintf
が使えるのは嬉しいです笑
でもなんかあんまりHaskellっぽくない…というかHaskellの良さを活かしきれてないきがする……精進します。