Lambda Calculi - March 2016: Compute the Perimeter of a Polygon
サンプルが意味もなく少ない。 あと問題文が分かりにくい。エスパーした。
問題
多角形$P$の頂点が、時計周りに与えられる。 自己交差等はない。 多角形$P$の周囲の長さを答えよ。
実装
module Main where
import Control.Applicative
import Control.Monad
distance :: (Int, Int) -> (Int, Int) -> Double
distance (ax, ay) (bx, by) = sqrt . fromIntegral $ (bx - ax) ^ 2 + (by - ay) ^ 2
perimeter :: [(Int, Int)] -> Double
perimeter p = sum $ zipWith distance p (last p : p)
main :: IO ()
main = do
n <- readLn
p <- replicateM n $ do
[x, y] <- map read . words <$> getLine
return (x, y)
print $ perimeter p