|
@@ -58,14 +58,18 @@ func hasSmallerNeighbors(input [][]int, x, y int) bool {
|
|
return false
|
|
return false
|
|
}
|
|
}
|
|
|
|
|
|
-func part1(input [][]int) (int, [][]int) {
|
|
|
|
|
|
+type point struct {
|
|
|
|
+ x, y int
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+func part1(input [][]int) (int, []point) {
|
|
var sum int
|
|
var sum int
|
|
- var lowPoints [][]int
|
|
|
|
|
|
+ var lowPoints []point
|
|
for x, row := range input {
|
|
for x, row := range input {
|
|
for y, value := range row {
|
|
for y, value := range row {
|
|
if !hasSmallerNeighbors(input, x, y) {
|
|
if !hasSmallerNeighbors(input, x, y) {
|
|
sum += value + 1
|
|
sum += value + 1
|
|
- lowPoints = append(lowPoints, []int{x, y})
|
|
|
|
|
|
+ lowPoints = append(lowPoints, point{x, y})
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -73,10 +77,6 @@ func part1(input [][]int) (int, [][]int) {
|
|
return sum, lowPoints
|
|
return sum, lowPoints
|
|
}
|
|
}
|
|
|
|
|
|
-type point struct {
|
|
|
|
- x, y int
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
func getNeighbors(input [][]int, x, y int) []point {
|
|
func getNeighbors(input [][]int, x, y int) []point {
|
|
var neighbors []point
|
|
var neighbors []point
|
|
if x-1 >= 0 && input[x-1][y] != 9 {
|
|
if x-1 >= 0 && input[x-1][y] != 9 {
|
|
@@ -125,18 +125,18 @@ func getBasin(input [][]int, x int, y int) []point {
|
|
return basin
|
|
return basin
|
|
}
|
|
}
|
|
|
|
|
|
-func getBasins(input [][]int, lowPoints [][]int) [][]point {
|
|
|
|
|
|
+func getBasins(input [][]int, lowPoints []point) [][]point {
|
|
var basins [][]point
|
|
var basins [][]point
|
|
|
|
|
|
for _, lowPoint := range lowPoints {
|
|
for _, lowPoint := range lowPoints {
|
|
- basin := getBasin(input, lowPoint[0], lowPoint[1])
|
|
|
|
|
|
+ basin := getBasin(input, lowPoint.x, lowPoint.y)
|
|
basins = append(basins, basin)
|
|
basins = append(basins, basin)
|
|
}
|
|
}
|
|
|
|
|
|
return basins
|
|
return basins
|
|
}
|
|
}
|
|
|
|
|
|
-func part2(input [][]int, lowPoints [][]int) int {
|
|
|
|
|
|
+func part2(input [][]int, lowPoints []point) int {
|
|
basins := getBasins(input, lowPoints)
|
|
basins := getBasins(input, lowPoints)
|
|
|
|
|
|
sort.Slice(basins, func(i, j int) bool {
|
|
sort.Slice(basins, func(i, j int) bool {
|