-
Notifications
You must be signed in to change notification settings - Fork 0
/
day09.go
38 lines (33 loc) · 827 Bytes
/
day09.go
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
package main
import (
"fmt"
)
func day09() {
lines := getLines("input/09.txt")
predictSum, predictSum2 := 0, 0
for _, line := range lines {
sequence := strToNumArray(line)
part1, part2 := predict(sequence)
predictSum += part1
predictSum2 += part2
}
var result = predictSum
var result2 = predictSum2
fmt.Println("Day 09 Part 1 Result: ", result)
fmt.Println("Day 09 Part 2 Result: ", result2)
}
func predict(sequence []int) (next, prev int) {
differences := make([]int, len(sequence)-1)
allZeroes := true
for i := 0; i < len(sequence)-1; i++ {
differences[i] = sequence[i+1] - sequence[i]
if differences[i] != 0 {
allZeroes = false
}
}
prevVal, nextVal := 0, 0
if !allZeroes {
nextVal, prevVal = predict(differences)
}
return sequence[len(sequence)-1] + nextVal, sequence[0] - prevVal
}