day9,10,11
This commit is contained in:
71
2023/go/day09/day09.go
Normal file
71
2023/go/day09/day09.go
Normal file
@@ -0,0 +1,71 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user