126 lines
2.4 KiB
Go
126 lines
2.4 KiB
Go
package day06
|
|
|
|
import (
|
|
"strconv"
|
|
"strings"
|
|
"tools"
|
|
)
|
|
|
|
func Part1(puzzle tools.AoCPuzzle) interface{} {
|
|
grid := make(map[int]map[int]bool)
|
|
for y := 0; y < 1000; y++ {
|
|
grid[y] = make(map[int]bool)
|
|
for x := 0; x < 1000; x++ {
|
|
grid[y][x] = false
|
|
}
|
|
}
|
|
|
|
var values []string
|
|
var command, start, end string
|
|
var aStart, aEnd []string
|
|
var startX, startY, endX, endY int
|
|
|
|
for _, instruction := range puzzle.GetInputArray() {
|
|
values = strings.Split(instruction, " ")
|
|
if len(values) == 4 {
|
|
command = values[0]
|
|
start = values[1]
|
|
end = values[3]
|
|
} else {
|
|
command = values[0] + " " + values[1]
|
|
start = values[2]
|
|
end = values[4]
|
|
}
|
|
|
|
aStart = strings.Split(start, ",")
|
|
aEnd = strings.Split(end, ",")
|
|
startX, _ = strconv.Atoi(aStart[0])
|
|
startY, _ = strconv.Atoi(aStart[1])
|
|
endX, _ = strconv.Atoi(aEnd[0])
|
|
endY, _ = strconv.Atoi(aEnd[1])
|
|
|
|
for x := startX; x <= endX; x++ {
|
|
for y := startY; y <= endY; y++ {
|
|
switch command {
|
|
case "toggle":
|
|
grid[x][y] = !grid[x][y]
|
|
case "turn on":
|
|
grid[x][y] = true
|
|
case "turn off":
|
|
grid[x][y] = false
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
onCount := 0
|
|
for y := range grid {
|
|
for x := range grid[y] {
|
|
if grid[x][y] {
|
|
onCount++
|
|
}
|
|
}
|
|
}
|
|
|
|
return onCount
|
|
}
|
|
|
|
func Part2(puzzle tools.AoCPuzzle) interface{} {
|
|
grid := make(map[int]map[int]int)
|
|
for y := 0; y < 1000; y++ {
|
|
grid[y] = make(map[int]int)
|
|
for x := 0; x < 1000; x++ {
|
|
grid[y][x] = 0
|
|
}
|
|
}
|
|
|
|
var values []string
|
|
var command, start, end string
|
|
var aStart, aEnd []string
|
|
var startX, startY, endX, endY int
|
|
|
|
for _, instruction := range puzzle.GetInputArray() {
|
|
values = strings.Split(instruction, " ")
|
|
if len(values) == 4 {
|
|
command = values[0]
|
|
start = values[1]
|
|
end = values[3]
|
|
} else {
|
|
command = values[0] + " " + values[1]
|
|
start = values[2]
|
|
end = values[4]
|
|
}
|
|
|
|
aStart = strings.Split(start, ",")
|
|
aEnd = strings.Split(end, ",")
|
|
startX, _ = strconv.Atoi(aStart[0])
|
|
startY, _ = strconv.Atoi(aStart[1])
|
|
endX, _ = strconv.Atoi(aEnd[0])
|
|
endY, _ = strconv.Atoi(aEnd[1])
|
|
|
|
for x := startX; x <= endX; x++ {
|
|
for y := startY; y <= endY; y++ {
|
|
switch command {
|
|
case "toggle":
|
|
grid[x][y] += 2
|
|
case "turn on":
|
|
grid[x][y]++
|
|
case "turn off":
|
|
if grid[x][y] > 0 {
|
|
grid[x][y]--
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
onCount := 0
|
|
for y := range grid {
|
|
for x := range grid[y] {
|
|
onCount += grid[x][y]
|
|
}
|
|
}
|
|
|
|
return onCount
|
|
}
|