aoc2016/day18/day.go
Stefan Harmuth 44b8be5a9e day18
2021-10-24 20:59:45 +02:00

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()
}