Tweaks
[advent-of-code-20.git] / advent09 / src / advent09.hs
1 -- import Debug.Trace
2
3 import Data.List
4
5 main :: IO ()
6 main =
7 do numStrs <- readFile "data/advent09.txt"
8 let nums = map (read @Int) $ lines numStrs
9 let firstInvalid = part1 nums
10 print firstInvalid
11 print $ part2 firstInvalid nums
12
13 part1 nums = fst $ head $ filter (not . valid) $ slidingWindow 25 nums
14
15 slidingWindow winSize nums =
16 zip (drop winSize nums) $ map (take winSize) $ tails nums
17
18 valid (target, window) = not $ null [(x, y) | x <- window, y <- window, x + y == target]
19
20
21 part2 target nums = (maximum section) + (minimum section)
22 where section = head $ filter (sumsToTarget target) $ subStrings smallNums
23 smallNums = dropWhileEnd (>= target) nums
24
25 -- subStrings :: [a] -> [[a]]
26 subStrings = (concatMap inits) . tails
27
28 -- sumsToTarget :: Int -> [Int] -> Bool
29 sumsToTarget target ns = sum ns == target
30