Days 7,8,9
This commit is contained in:
80
2023/gareth/day09/day09.go
Normal file
80
2023/gareth/day09/day09.go
Normal file
@@ -0,0 +1,80 @@
|
||||
package day09
|
||||
|
||||
import (
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func Part1(input string) int {
|
||||
lines := strings.Split(input, "\r\n")
|
||||
total := 0
|
||||
for _, line := range lines {
|
||||
var intSeq []int
|
||||
seq := strings.Split(line, " ")
|
||||
for _, i := range seq {
|
||||
num, _ := strconv.Atoi(i)
|
||||
intSeq = append(intSeq, num)
|
||||
}
|
||||
total += extrapolate1(intSeq)
|
||||
}
|
||||
return total
|
||||
}
|
||||
|
||||
func Part2(input string) int {
|
||||
lines := strings.Split(input, "\r\n")
|
||||
total := 0
|
||||
for _, line := range lines {
|
||||
var intSeq []int
|
||||
seq := strings.Split(line, " ")
|
||||
for _, i := range seq {
|
||||
num, _ := strconv.Atoi(i)
|
||||
intSeq = append(intSeq, num)
|
||||
}
|
||||
total += extrapolate2(intSeq)
|
||||
}
|
||||
return total
|
||||
}
|
||||
|
||||
func extrapolate1(array []int) int {
|
||||
allZeros := true
|
||||
for _, x := range array {
|
||||
if x != 0 {
|
||||
allZeros = false
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
if allZeros {
|
||||
return 0
|
||||
}
|
||||
|
||||
deltas := make([]int, len(array)-1)
|
||||
for i := 0; i < len(array)-1; i++ {
|
||||
deltas[i] = array[i+1] - array[i]
|
||||
}
|
||||
|
||||
diff := extrapolate1(deltas)
|
||||
return array[len(array)-1] + diff
|
||||
}
|
||||
|
||||
func extrapolate2(array []int) int {
|
||||
allZeros := true
|
||||
for _, x := range array {
|
||||
if x != 0 {
|
||||
allZeros = false
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
if allZeros {
|
||||
return 0
|
||||
}
|
||||
|
||||
deltas := make([]int, len(array)-1)
|
||||
for i := 0; i < len(array)-1; i++ {
|
||||
deltas[i] = array[i+1] - array[i]
|
||||
}
|
||||
|
||||
diff := extrapolate2(deltas)
|
||||
return array[0] - diff
|
||||
}
|
||||
Reference in New Issue
Block a user