雑記です
2025-10-02
type I = [[Int]]
type O = Int
solve :: I -> O
solve [[n],as,bs] = sum $ zipWith ((abs .) . (-)) as' bs'
where
as' = sort as
bs' = sort bs
Ai, Bjそれぞれ小さい順に取り出して、小学生iが小学校jに行くと確定していくと問題が解ける。「小さい順に取り出す」は「大きい順に取り出す」でもOK。
zipWith ((abs .) . (-)) as' bs'
は
zipWith (\a b -> abs (a - b)) as' bs'
のこと。型を書き下すと以下のようになる。
abs :: Num a => a -> a
(abs .) :: Num c => (a -> c) -> a -> c
(-) :: Num a => a -> (a -> a)
(abs .) . (-) :: Num a => a -> a -> a
前者の形をすらすら書けるとカッコいいので練習していきたい。ところで、後者の形(\a b -> ...
)の方が実行時間が短かった。たまたまなのか、ghcの仕様上現れた現象なのか、追々調べてみたい。