|
@@ -112,6 +112,42 @@ func findNeighbours(tile position) map[position]int {
|
|
|
return neighbours
|
|
|
}
|
|
|
|
|
|
+func numberOfBlackNeighbours(neighbours map[position]int, blackTiles map[position]int) int {
|
|
|
+ black := 0
|
|
|
+ for neighbour, _ := range neighbours {
|
|
|
+ if _, ok := blackTiles[neighbour]; ok {
|
|
|
+ black++
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return black
|
|
|
+}
|
|
|
+
|
|
|
+func flip(blackTiles map[position]int) map[position]int {
|
|
|
+ newBlackTiles := make(map[position]int)
|
|
|
+
|
|
|
+ for key, _ := range blackTiles {
|
|
|
+ neighbours := findNeighbours(key)
|
|
|
+ blackNeighbours := numberOfBlackNeighbours(neighbours, blackTiles)
|
|
|
+ if blackNeighbours > 0 || blackNeighbours <= 2 {
|
|
|
+ newBlackTiles[key] = 0
|
|
|
+ }
|
|
|
+
|
|
|
+ for neighbour, _ := range neighbours {
|
|
|
+ if _, ok := blackTiles[neighbour]; ok {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+
|
|
|
+ anotherNeighbours := findNeighbours(neighbour)
|
|
|
+ if numberOfBlackNeighbours(anotherNeighbours, blackTiles) == 2 {
|
|
|
+ newBlackTiles[neighbour] = 0
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return newBlackTiles
|
|
|
+}
|
|
|
+
|
|
|
func main() {
|
|
|
if len(os.Args) < 2 {
|
|
|
log.Fatal("You need to specify a file!")
|
|
@@ -132,7 +168,6 @@ func main() {
|
|
|
tiles := makeAllMoves(paths)
|
|
|
blackTiles := part1(tiles)
|
|
|
fmt.Println("Part1:", len(blackTiles))
|
|
|
- for key, _ := range blackTiles {
|
|
|
- fmt.Println(findNeighbours(key))
|
|
|
- }
|
|
|
+
|
|
|
+ fmt.Println(len(flip(blackTiles)))
|
|
|
}
|