42 lines
776 B
Haskell
42 lines
776 B
Haskell
module Day01 where
|
|
|
|
import Data.List (tails)
|
|
import Data.Maybe (fromMaybe)
|
|
|
|
|
|
example :: [Integer]
|
|
example =
|
|
[ 1721
|
|
, 979
|
|
, 366
|
|
, 299
|
|
, 675
|
|
, 1456
|
|
]
|
|
|
|
scout :: Int -> [[Integer]] -> Maybe [[Integer]]
|
|
scout _ [] = Nothing
|
|
scout 0 _ = Just []
|
|
scout 1 (h:_) = Just $ map (:[]) h
|
|
scout n (h:t) = do
|
|
a <- map (head h:) <$> scout (n-1) t
|
|
let b = fromMaybe [] $ scout n t
|
|
pure $ a <> b
|
|
|
|
|
|
solve :: Int -> [Integer] -> Integer
|
|
solve n = product . head . filter ((2020==) . sum) . fromMaybe [] . scout n . tails
|
|
|
|
solve1 :: [Integer] -> Integer
|
|
solve1 = solve 2
|
|
|
|
solve2 :: [Integer] -> Integer
|
|
solve2 = solve 3
|
|
|
|
main :: IO ()
|
|
main = do
|
|
contents <- readFile "../.inputs/01.txt"
|
|
let list = map read $ words contents
|
|
print $ solve1 list
|
|
print $ solve2 list
|