-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathday09.jl
43 lines (38 loc) · 1 KB
/
day09.jl
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
module Day09
using AdventOfCode2020
function day09(input::String = readInput(joinpath(@__DIR__, "..", "data", "day09.txt")))
numbers = parse.(Int, split(strip(input), "\n"))
p1 = part1(numbers, 25)
return [p1, part2(numbers, p1)]
end
function part1(numbers, nprev)
for i in (nprev+1):length(numbers)
found = false
for j in (i-1):-1:(i-nprev)
for k in (j-1):-1:(i-nprev)
if numbers[i] == numbers[j] + numbers[k]
found = true
@goto ok
end
end
end
@label ok
if !found
return numbers[i]
end
end
end
function part2(numbers, invnumber)
for i in 1:length(numbers)
s = numbers[i]
for j in (i+1):length(numbers)
s += numbers[j]
if s == invnumber
return sum(extrema(@view numbers[i:j]))
elseif s > invnumber
break
end
end
end
end
end # module