advent-of-code/2020/Haskell/day01.hs

42 lines
776 B
Haskell
Raw Normal View History

2023-10-15 18:30:04 +02:00
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