2021 Day 22 Part 1
This commit is contained in:
parent
f9fd04b4ea
commit
42b6f2b511
1 changed files with 82 additions and 0 deletions
82
2021/day22/main.go
Normal file
82
2021/day22/main.go
Normal file
|
|
@ -0,0 +1,82 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/jdkaplan/advent-of-code/aoc"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
lines := aoc.Input().ReadLines("day22.txt")
|
||||||
|
steps := parseInput(lines)
|
||||||
|
fmt.Println(part1(steps))
|
||||||
|
}
|
||||||
|
|
||||||
|
func parseInput(lines []string) (steps []Step) {
|
||||||
|
for _, line := range lines {
|
||||||
|
steps = append(steps, NewStep(line))
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func part1(steps []Step) int {
|
||||||
|
r := make(Reactor)
|
||||||
|
r.Initialize(steps)
|
||||||
|
return r.CountOn()
|
||||||
|
}
|
||||||
|
|
||||||
|
type Step struct {
|
||||||
|
op string
|
||||||
|
x1, x2 int
|
||||||
|
y1, y2 int
|
||||||
|
z1, z2 int
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewStep(line string) (s Step) {
|
||||||
|
aoc.MustScan(
|
||||||
|
line,
|
||||||
|
"%s x=%d..%d,y=%d..%d,z=%d..%d",
|
||||||
|
&s.op, &s.x1, &s.x2, &s.y1, &s.y2, &s.z1, &s.z2,
|
||||||
|
)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
type Cell struct{ x, y, z int }
|
||||||
|
|
||||||
|
type Reactor map[Cell]bool
|
||||||
|
|
||||||
|
func (r Reactor) Initialize(steps []Step) {
|
||||||
|
for _, s := range steps {
|
||||||
|
on := s.op == "on"
|
||||||
|
for x := max(-50, s.x1); x <= min(50, s.x2); x++ {
|
||||||
|
for y := max(-50, s.y1); y <= min(50, s.y2); y++ {
|
||||||
|
for z := max(-50, s.z1); z <= min(50, s.z2); z++ {
|
||||||
|
r[Cell{x, y, z}] = on
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func min(a, b int) int {
|
||||||
|
if a < b {
|
||||||
|
return a
|
||||||
|
}
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
func max(a, b int) int {
|
||||||
|
if a > b {
|
||||||
|
return a
|
||||||
|
}
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r Reactor) CountOn() (count int) {
|
||||||
|
for _, on := range r {
|
||||||
|
if on {
|
||||||
|
count++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
Loading…
Reference in a new issue