Atcoder #002と#003のAをHaskellで解く
Atcoder #002 A
getLineで入れて,isLeapyearでYES or NOを返して,putStrで表示するだけのお仕事
isLeapyear :: String -> String isLeapyear ys | y `mod` 400 == 0 = "YES\n" | y `mod` 100 == 0 = "NO\n" | y `mod` 4 == 0 = "YES\n" | otherwise = "NO\n" where y = read ys :: Int main = do s <- getLine putStr $ isLeapyear s
Atcoder #003 A
なぜか紆余曲折を経た問題.実行後に最初の構想で書いたらできてる.不思議
point :: Char -> Double point 'A' = 4 point 'B' = 3 point 'C' = 2 point 'D' = 1 point 'F' = 0 main = do _ <- getLine s <- getLine let l = map point s putStr $ (show $ (sum l) / (fromIntegral $ length l)) ++ "\n"
#001, #004はやっていない.(#003に時間を費やしてしまった.)
追記 やった
Atcoder #004 A
#004: 先駆者の方々のコード見て勉強します.
xy :: [String] -> [(Double, Double)] xy ps = [(x, y) | p <- ps, let x = read (words p !! 0); y = read (words p !! 1)] distall :: (Floating a) => [(a, a)] -> [a] distall [p] = [0] distall (p:ps) = [dist p ap | ap <- ps] ++ distall ps dist :: (Floating a) => (a, a) -> (a, a) -> a dist (x1, y1) (x2, y2) = sqrt $ (x1 - x2) ^ 2 + (y1 - y2) ^ 2 main = do n <- getLine rs <- sequence $ take (read n) (repeat getLine) print $ maximum . distall $ xy rs