answer2 :: IO ()
answer2 =
    let
-- optimistic setting, maybe there is no way to partition the
-- remaining presents in the 3 other spaces for a given first
-- group. This thing actually work so I let go :D
        groups     = map fst (selectTarget (sum weights `quot` 4) weights)
        bestSize   = length $ head groups
        candidates = takeWhile ((<=bestSize) . length) groups
    in  print $ minimum $ map product candidates
answer2 :: IO ()
answer2 =
    let
-- optimistic setting, maybe there is no way to partition the
-- remaining presents in the 3 other spaces for a given first
-- group. This thing actually work so I let go :D
        groups     = map fst (selectTarget (sum weights `quot` 4) weights)
        bestSize   = length $ head groups
        candidates = takeWhile ((<=bestSize) . length) groups
    in  print $ minimum $ map product candidates
answer2 =
    let
-- optimistic setting, maybe there is no way to partition the
-- remaining presents in the 3 other spaces for a given first
-- group. This thing actually work so I let go :D
        groups     = map fst (selectTarget (sum weights `quot` 4) weights)
        bestSize   = length $ head groups
        candidates = takeWhile ((<=bestSize) . length) groups
    in  print $ minimum $ map product candidates