Files
adventofcode/2023/go/day09/day09.go
2023-12-13 23:54:55 +00:00

71 lines
1.1 KiB
Go

package day09
import (
_ "fmt"
"strings"
"adventofcode2023/utils/inputs"
)
func Part1(input string) int {
ins := parseInput(input)
ans := 0
for _, in := range ins {
ans += f1(in)
}
return ans
}
func Part2(input string) int {
ins := parseInput(input)
ans := 0
for _, in := range ins {
reverse(in)
ans += f1(in)
}
return ans}
func f1(in []int) int {
out := []int{}
for i:=0;i<len(in)-1;i++{
out = append(out, in[i+1] - in[i])
}
if allZero(out) {
return in[len(in) -1]
} else {
return in[len(in) -1] + f1(out)
}
}
func reverse(nums []int) {
for i, j := 0, len(nums)-1; i < j; i, j = i+1, j-1 {
nums[i], nums[j] = nums[j], nums[i]
}
}
func allZero(in []int) bool {
for _, v := range in {
if v != 0 {
return false
}
}
return true
}
func diff(in []int) []int {
out := []int{}
for i:=0;i<len(in)-1;i++{
out = append(out, in[i+1] - in[i])
}
return out
}
func parseInput(input string) ([][]int) {
lines := strings.Split(input, "\n")
out := [][]int{}
for _, line := range lines {
out = append(out, inputs.ToInts(line, " "))
}
return out
}