|
@@ -36,6 +36,63 @@ var directions [][]int = [][]int{
|
|
{0, -1}, {1, 0}, {0, 1}, {-1, 0},
|
|
{0, -1}, {1, 0}, {0, 1}, {-1, 0},
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+func getPlots(current Point, matrix [][]byte, xMax, yMax int) []Point {
|
|
|
|
+ var plots []Point
|
|
|
|
+ for _, direction := range directions {
|
|
|
|
+ plot := Point{x: current.x + direction[0], y: current.y + direction[1]}
|
|
|
|
+ if plot.x >= 0 && plot.x < xMax &&
|
|
|
|
+ plot.y >= 0 && plot.y < yMax && matrix[plot.y][plot.x] == current.value {
|
|
|
|
+ plot.value = matrix[plot.y][plot.x]
|
|
|
|
+ plots = append(plots, plot)
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return plots
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+func getRegion(start Point, matrix [][]byte, xMax, yMax int, checked map[string]bool) []Point {
|
|
|
|
+ plots := []Point{start}
|
|
|
|
+ var region []Point
|
|
|
|
+
|
|
|
|
+ for len(plots) > 0 {
|
|
|
|
+ current := plots[0]
|
|
|
|
+ plots = plots[1:]
|
|
|
|
+
|
|
|
|
+ if !checked[current.key()] {
|
|
|
|
+ region = append(region, current)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ checked[current.key()] = true
|
|
|
|
+
|
|
|
|
+ newPlots := getPlots(current, matrix, xMax, yMax)
|
|
|
|
+ for _, plot := range newPlots {
|
|
|
|
+ if !checked[plot.key()] {
|
|
|
|
+ plots = append(plots, plot)
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return region
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+func part1(matrix [][]byte) int {
|
|
|
|
+ xMax := len(matrix[0])
|
|
|
|
+ yMax := len(matrix)
|
|
|
|
+ checked := make(map[string]bool)
|
|
|
|
+
|
|
|
|
+ for y := range matrix {
|
|
|
|
+ for x := range matrix[y] {
|
|
|
|
+ current := Point{x: x, y: y, value: matrix[y][x]}
|
|
|
|
+ if !checked[current.key()] {
|
|
|
|
+ region := getRegion(current, matrix, xMax, yMax, checked)
|
|
|
|
+ fmt.Println(region)
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return 0
|
|
|
|
+}
|
|
|
|
+
|
|
func main() {
|
|
func main() {
|
|
if len(os.Args) < 2 {
|
|
if len(os.Args) < 2 {
|
|
log.Fatal("You need to specify a file!")
|
|
log.Fatal("You need to specify a file!")
|
|
@@ -48,5 +105,5 @@ func main() {
|
|
}
|
|
}
|
|
|
|
|
|
matrix := readInput(file)
|
|
matrix := readInput(file)
|
|
- fmt.Println(matrix)
|
|
|
|
|
|
+ fmt.Println(part1(matrix))
|
|
}
|
|
}
|