7 do numStrs <- readFile "data/advent09.txt"
8 let nums = map (read @Int) $ lines numStrs
9 let firstInvalid = part1 nums
11 print $ part2 firstInvalid nums
13 part1 nums = fst $ head $ filter (not . valid) $ slidingWindow 25 nums
15 slidingWindow winSize nums =
16 zip (drop winSize nums) $ map (take winSize) $ tails nums
18 valid (target, window) = not $ null [(x, y) | x <- window, y <- window, x + y == target]
21 part2 target nums = (maximum section) + (minimum section)
22 where section = head $ filter (sumsToTarget target) $ subStrings smallNums
23 smallNums = dropWhileEnd (>= target) nums
25 -- subStrings :: [a] -> [[a]]
26 subStrings = (concatMap inits) . tails
28 -- sumsToTarget :: Int -> [Int] -> Bool
29 sumsToTarget target ns = sum ns == target