import Control.Monad import Data.List main :: IO () main = do input <- map read . lines <$> readFile "input" print $ (product . map length . group . sort . jolts) input print $ (product . map (last . trib [0, 0, 1] . sum) . filter (elem 1) . group . jolts) input jolts :: [Integer] -> [Integer] jolts = ap (zipWith subtract) tail . (\x -> 0 : x ++ [last x + 3]) . sort trib :: [Integer] -> Integer -> [Integer] trib x 0 = x trib [x, y, z] n = trib [y, z, x + y + z] (n - 1)