LoginSignup
4
3

More than 5 years have passed since last update.

HaskellでAtCoder Beginner Contest 001

Posted at

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

4
3
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3