67 lines
977 B
Go
67 lines
977 B
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"git.z1glr.de/advent-of-code-2025/pkg/aoc"
|
|
)
|
|
|
|
func testGrid(g *[][]string) int {
|
|
rollCount := 0
|
|
|
|
for yy, row := range *g {
|
|
for xx, roll := range row {
|
|
if roll == "@" {
|
|
freeCount := 0
|
|
|
|
for x := xx - 1; x <= xx+1; x++ {
|
|
for y := yy - 1; y <= yy+1; y++ {
|
|
if x < 0 || y < 0 || x >= len(row) || y >= len(*g) {
|
|
freeCount++
|
|
} else if (*g)[y][x] == "." {
|
|
freeCount++
|
|
}
|
|
}
|
|
}
|
|
|
|
if freeCount > 4 {
|
|
rollCount++
|
|
|
|
(*g)[yy][xx] = "x"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
for yy, row := range *g {
|
|
for xx, roll := range row {
|
|
if roll != "@" {
|
|
(*g)[yy][xx] = "."
|
|
} else {
|
|
fmt.Print()
|
|
}
|
|
}
|
|
}
|
|
|
|
return rollCount
|
|
}
|
|
|
|
func main() {
|
|
lines := aoc.ReadFileRows(false)
|
|
|
|
grid := aoc.RowsToGrid(lines)
|
|
|
|
rollCount := testGrid(&grid)
|
|
fmt.Println(rollCount)
|
|
|
|
for {
|
|
if newCount := testGrid(&grid); newCount == 0 {
|
|
break
|
|
} else {
|
|
rollCount += newCount
|
|
}
|
|
}
|
|
|
|
fmt.Println(rollCount)
|
|
}
|