|
@@ -50,7 +50,7 @@ func allZeros(numbers []int) bool {
|
|
|
return true
|
|
|
}
|
|
|
|
|
|
-func getNext(numbers []int) int {
|
|
|
+func buildNewMatrix(numbers []int) [][]int {
|
|
|
var matrix [][]int
|
|
|
matrix = append(matrix, numbers)
|
|
|
level := 0
|
|
@@ -72,22 +72,32 @@ func getNext(numbers []int) int {
|
|
|
level++
|
|
|
}
|
|
|
|
|
|
- for i := len(matrix) - 1; i > 0; i-- {
|
|
|
+ return matrix
|
|
|
+}
|
|
|
+
|
|
|
+func getNextAndPrevious(numbers []int) (int, int) {
|
|
|
+ matrix := buildNewMatrix(numbers)
|
|
|
+ bottom := len(matrix) - 1
|
|
|
+ for i := bottom; i > 0; i-- {
|
|
|
matrix[i-1] = append(matrix[i-1], matrix[i][len(matrix[i])-1]+matrix[i-1][len(matrix[i-1])-1])
|
|
|
}
|
|
|
|
|
|
- return matrix[0][len(matrix[0])-1]
|
|
|
+ for i := bottom; i > 0; i-- {
|
|
|
+ matrix[i-1] = append([]int{matrix[i-1][0] - matrix[i][0]}, matrix[i-1]...)
|
|
|
+ }
|
|
|
+
|
|
|
+ return matrix[0][len(matrix[0])-1], matrix[0][0]
|
|
|
}
|
|
|
|
|
|
-func part1(matrix [][]int) int {
|
|
|
- var result int
|
|
|
+func parts(matrix [][]int) (int, int) {
|
|
|
+ var part1, part2 int
|
|
|
for i := range matrix {
|
|
|
- next := getNext(matrix[i])
|
|
|
- matrix[i] = append(matrix[i], next)
|
|
|
- result += next
|
|
|
+ next, previous := getNextAndPrevious(matrix[i])
|
|
|
+ part1 += next
|
|
|
+ part2 += previous
|
|
|
}
|
|
|
|
|
|
- return result
|
|
|
+ return part1, part2
|
|
|
}
|
|
|
|
|
|
func main() {
|
|
@@ -103,5 +113,7 @@ func main() {
|
|
|
}
|
|
|
|
|
|
matrix := readInput(file)
|
|
|
- fmt.Println("Part1:", part1(matrix))
|
|
|
+ part1, part2 := parts(matrix)
|
|
|
+ fmt.Println("Part1:", part1)
|
|
|
+ fmt.Println("Part2:", part2)
|
|
|
}
|