kutakuta

雑記です

View My GitHub Profile

014 - We Used to Sing a Song Together(★3)

2025-10-02

問題

解答

提出 #69787533

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の仕様上現れた現象なのか、追々調べてみたい。