42 lines
1.1 KiB
Go
42 lines
1.1 KiB
Go
package day18
|
|
|
|
import (
|
|
"tools"
|
|
)
|
|
|
|
func getGridFromInput(inp string) tools.GridToggle {
|
|
grid := tools.NewGridToggle()
|
|
for i, c := range inp {
|
|
grid.Set(i, 0, c == '^')
|
|
}
|
|
return grid
|
|
}
|
|
|
|
func calcTraps(grid tools.GridToggle, cols, rows int) tools.GridToggle {
|
|
for row := 1; row < rows; row++ {
|
|
for x := 0; x < cols; x++ {
|
|
grid.Set(x, row,
|
|
(grid.State(x-1, row-1) && grid.State(x, row-1) && !grid.State(x+1, row-1)) ||
|
|
(!grid.State(x-1, row-1) && grid.State(x, row-1) && grid.State(x+1, row-1)) ||
|
|
(grid.State(x-1, row-1) && !grid.State(x, row-1) && !grid.State(x+1, row-1)) ||
|
|
(!grid.State(x-1, row-1) && !grid.State(x, row-1) && grid.State(x+1, row-1)))
|
|
}
|
|
}
|
|
|
|
return grid
|
|
}
|
|
|
|
func Part1(puzzle tools.AoCPuzzle) interface{} {
|
|
inp := puzzle.GetInputString()
|
|
width := len(inp)
|
|
field := calcTraps(getGridFromInput(inp), width, 40)
|
|
return (field.MaxX+1)*(field.MaxY+1) - field.GetOnCount()
|
|
}
|
|
|
|
func Part2(puzzle tools.AoCPuzzle) interface{} {
|
|
inp := puzzle.GetInputString()
|
|
width := len(inp)
|
|
field := calcTraps(getGridFromInput(inp), width, 400000)
|
|
return (field.MaxX+1)*(field.MaxY+1) - field.GetOnCount()
|
|
}
|