github.com/agrigoryan/aoc_2023_go@v0.0.0-20231216221323-4ace361ec685/day9/d9p2.go (about) 1 package day9 2 3 import ( 4 "fmt" 5 "log" 6 "strconv" 7 "strings" 8 ) 9 10 func findPrevElement(arr []int) int { 11 allZeroes := true 12 for i := len(arr) - 1; i >= 0; i-- { 13 if arr[i] != 0 { 14 allZeroes = false 15 } 16 if i < len(arr)-1 { 17 arr[i+1] = arr[i+1] - arr[i] 18 } 19 } 20 if allZeroes { 21 return 0 22 } 23 return arr[0] - findPrevElement(arr[1:]) 24 } 25 26 func d9p2(input string) int { 27 lines := strings.Split(input, "\n") 28 29 sum := 0 30 for _, line := range lines { 31 numStrings := strings.Split(line, " ") 32 arr := []int{} 33 for _, s := range numStrings { 34 n, err := strconv.Atoi(s) 35 if err != nil { 36 log.Fatal(err) 37 } 38 arr = append(arr, n) 39 } 40 41 sum += findPrevElement(arr) 42 } 43 44 fmt.Println(sum) 45 return sum 46 }