Watch
1
0
Fork
You've already forked advent-of-code
0

2021 Day 19 Part 2

This commit is contained in:
Jeremy Kaplan 2021-12-19 16:51:50 -08:00
commit 0af5fe823c

View file

@ -15,12 +15,30 @@ func init() {
func main() {
text := aoc.Input().ReadFile("day19.txt")
fmt.Println(part1(text))
scanners := parseInput(text)
offsets := placeScanners(scanners)
fmt.Println(part1(scanners, offsets))
fmt.Println(part2(offsets))
}
func part1(text string) int {
scanners := parseInput(text)
func part1(scanners map[int]Scanner, offsets map[int]Offset) int {
return uniqPoints(scanners, offsets)
}
func part2(offsets map[int]Offset) (max int) {
for i := 0; i < len(offsets)-1; i++ {
for j := i + 1; j < len(offsets); j++ {
si, sj := offsets[i], offsets[j]
distance := si.tx.minus(sj.tx).manhattan()
if distance > max {
max = distance
}
}
}
return
}
func placeScanners(scanners map[int]Scanner) map[int]Offset {
offsets := make(map[int]Offset)
offsets[0] = Offset{tx: V{0, 0, 0}, rot: noRot}
@ -46,7 +64,7 @@ solve:
}
}
}
return uniqPoints(scanners, offsets)
return offsets
}
type Offset struct {
@ -151,6 +169,17 @@ func (v V) rot(r R) V {
return rot(r, v)
}
func (v V) manhattan() int {
return abs(v.x) + abs(v.y) + abs(v.z)
}
func abs(n int) int {
if n < 0 {
return -n
}
return n
}
type R struct {
xx, xy, xz int
yx, yy, yz int