我流Haskell書法
関数型宣言はコンパイラに任せる(自分では可能な限り宣言しない)
関数は小さな部品関数の組み合わせで書く
手続き型形式を極力排す(do… はなるべく使わない)
中間変数はなるべく使わない(理想はpointfree style)
最短 (Code Golf) かつ実用上(競プロなどで)最速を目指す
例 AtCoder 競プロ典型 90 問 70 日目 - Plant Planning(★4)
import Control.Monad
import qualified Data.ByteString.Char8 as C
import Data.List
main = readLn @Int >>= \n -> replicateM n ints >>= print . sol n
ints = unfoldr (C.readInt . C.dropWhile (==' ')) <$> C.getLine
sol n as = g x xs+g y ys
where
[xs,ys] = transpose as
(x,y) = (f xs,f ys)
f = (!! (n `div` 2)) . sort
d x x' = abs (x-x')
g x = foldl' ((. d x) . (+)) 0
いいなと思ったら応援しよう!
ありがとう