Posted at

HaskellでAtCoder Beginner Contest 001

More than 3 years have passed since last update.

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の良さを活かしきれてないきがする……精進します。