-
Notifications
You must be signed in to change notification settings - Fork 0
/
day9.hs
28 lines (24 loc) · 823 Bytes
/
day9.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import Data.List
main = do
contents <- readFile "day9_input"
let input = (read::String->Int) <$> lines contents
-- Part 1
nonValidInput = findNonValid input
print nonValidInput
-- Part 2
let weakness = findNonValidSum input nonValidInput
res = minimum weakness + maximum weakness
print res
findNonValidSum::[Int] -> Int -> [Int]
findNonValidSum nums sumToFind =
let a = head $ dropWhile (\x -> sum x < sumToFind) $ inits nums
in if sum a == sumToFind then a else findNonValidSum (tail nums) sumToFind
findNonValid::[Int] -> Int
findNonValid nums
| valid = findNonValid (tail nums)
| not valid = num
where (l, num:_) = splitAt 25 nums
valid = isValid l num
isValid::[Int] -> Int -> Bool
isValid nums num =
or [x /= y | x <- nums, y <- nums, x+y == num]