aoc2016/archive/day18/day.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()
}