github.com/agrigoryan/aoc_2023_go@v0.0.0-20231216221323-4ace361ec685/day9/d9p1.go (about)

     1  package day9
     2  
     3  import (
     4  	"fmt"
     5  	"log"
     6  	"strconv"
     7  	"strings"
     8  )
     9  
    10  func findNextElement(arr []int) int {
    11  	allZeroes := true
    12  	for i := 0; i < len(arr); i++ {
    13  		if arr[i] != 0 {
    14  			allZeroes = false
    15  		}
    16  		if i < len(arr)-1 {
    17  			arr[i] = arr[i+1] - arr[i]
    18  		}
    19  	}
    20  	if allZeroes {
    21  		return 0
    22  	}
    23  	return findNextElement(arr[:len(arr)-1]) + arr[len(arr)-1]
    24  }
    25  
    26  func d9p1(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 += findNextElement(arr)
    42  	}
    43  
    44  	fmt.Println(sum)
    45  	return sum
    46  }