2021 Day 20 Complete

This commit is contained in:
2021-12-20 14:56:51 -06:00
parent 91595691b5
commit c7e4c2eb17
7 changed files with 1252 additions and 8 deletions

102
2021/day20/input Normal file
View File

@@ -0,0 +1,102 @@
##..#######.#.#...##..#.#....#..#####..###...#..#.#..##....#.###..#.###..#.#.#.##.######.#.##.#.#..#######.####..#.#.#.##..##.#.#######...#..#...........###.#.........#..#....#.#..##.##....#.##.#...#.##..##....##..#####......#.#.##....#...#########...#..##...####.#####.##.#.###..##.##..#.#..#.......#..##....#.##.######.#.##..##......####...#.##..#...#.###.##..##...#..#####..#.#.###.#.##..##..#####...#.#.#...###..#.##.####.#.#..#####..##.##...#.#.#....####.##..#.##.###.....##.#....#####....###...##.#.#......
##.##...#.##...####.#.#..######......#.##.#.#.###......#.#...##..##.###.###.##.#..#..#.....#..####..
#######...##..#....#..####..##.##.#.##.##.##..#...##.##..##..#..##....#########....##........###...#
##.#.###...#...###.#####..#..#.##..#....#####..##.#..#..#....##.#..#.#..#...#.##....##.##......#####
..#...##..##..#.###..###.#.###.##.#.###.##.####..#.#.##....#..##.###.##..##......#.#####.##..#.#.#.#
#.........#.##.#.#....#..#..##..###..###.#...##.#.#.###.##..#.##.......###.###...#..##.#####.#...#.#
.##..####.#.###.#..#.......####.....#.###...####.#.###..####..#.......##.##.##########..#.#.#..#.#..
#..#.###..#.##..######.....#######.##.#.#...##..#.##...##..#.##..###..######..#.##.....##...#.#.#.#.
###..#..###.#.#.#...#####...#.#..#.##....##.#.##..#..###.#..##..####.######.#.#...#.#..#.####...##.#
#....#...#####.###.######..#....##.#....#####..#.#####...#.#...#.#.#.######...##...##.##..####.##..#
.###..####.#..##.#####.#...#....####.#.##..##..###....#.#..##...#..#..####.####...#...#....###..##.#
..#...####.##.#.#.##.#..##.....#.#.###.#.#.##....##........#...##...#.#.####.##..#...#.#.....#..#..#
.##....#....#.##.##.......####.#.###.#..##..#.#..#..#.....#.##.###..##.##..#.####.######.#.##..#.##.
..##.#..#.#..#.#....######.....#..##...#......##....#...#..#.#...#..#.#.#####....####.###.#.#####...
#.#...#.####.###..#.#.####.####...###.###.#.#..##........#..#...##.###....##..#..##.#.####.#.##..##.
###.###.#.#.......###.#....####..##.#....#.####...#..#.#.##.....##..##......#####...#..##.....##.#.#
#...###.#.#..#.#.#..####.######..#..##.###..#....#..#..##.##..##.###...####..#..#..####..#.#####.##.
..#.##....#.###...#######..##.#.##..###...#...#....####.#.##.####....##..###...##.#.####..#..#..#.#.
#######..#.#.#.#.###..###..###.....#####..######.#.#..#.#.#..#.#.#.#...#.#..##....#.####.###.##.#.#.
..###...##.#.#######.....###..##.#..###....##........##..#..#.##.#.####.##....#####.##..##...##....#
.#..#..#...##.#.##..#.#.##.##.######..#.####...#.......####....#.###..#....#.#........####.#...#.##.
##..#.#...#.#.##.#..#.##.......##.#..#.#.#.#.####.##....#.#...#....######.#......#.##.#.##...#.##..#
#.#.#.#########...#.##..#...###....#..#..#.###.##...#.#..#...#.#...#.###.#.#.##..##....###...#.#...#
##..###.#.####.##..##.##.###.##.#.#..##..#######...#...#.###.#.##.##.#...#.....#.#.#####..##.#.##.#.
...#..##...###########.#.#####.###.#.......#....#####..#.#.###..#....#...###...#..##.###...##.###.##
##.......#....####..#...##.####..#.#..#..####......#.....#.##.#.##..#...#.####.#.#.#.##...#...#..#..
#.....##.#......##.####.##.#....#.####..#..##.#..#.##.#.#..###.##..#.#..####......##.#..##..####....
.#.##.##..#...########.#.#.......#...#.###..#...#..#..##.#.#...#####..#..######..#..#.#...###..##.#.
##.##..##...#.##.##.#.###.#.....##.#...####.###.#.#..#...##.#.#...###..###..#...#.#..##......#..###.
####..#.#..#...##.###....#..##.##.##.#..#..#.##..##...#.#.#.#...#.#......####.#.#..#......##.##.....
##.....##..#...##.######.#....#.###....####.##.##.###.#.##..####.#...##.##.#.##.....#..###.#.....###
#.#..#..#.#....##.#.##.#...##.#.#..##.#.##...#...###.#...#####.#.....##.#.#...##.....######..#.#.###
...#.#..##.....####.#.#..#.#.###.....##..#.#..#.##..#.#.##..##...##...#.####.#.#.##...####.#.#.#.#.#
...##.##...#####.#.#..###.####.#.#.#.#.#####.#.######.####.#.#.##.####.####..###.#...###..#.#.#.####
#..##.#.##.#..#.##.##...#.#.##.#.##..#.###.###..#.##....##.####....##..#.#.##.####.#....##..#.#..#..
#.######.##.###.#.#...##...##...#.###..###.#.......#.###...#..##.....#..#.......##.###.....#.##..#.#
..#.##.#...##.#..#...###.#.##.###...#...#...#..###...#..#...######.###.#.....#.###.#..###.....#...#.
##.#.#.......###.#.#....#..#.#.#..#..#.###.##.#..#..###.###.#....#.......###....##.#.###.###.###...#
...##.###..#...#.#...##..##..#.#.#...#.##..#.....#..#...###..##.##.##.....####..#.#.#..##..##..#..#.
#......#####..#.###.....##...######.......#..####....#.#.#...#.#..#.####.#...###...#..#.#.##...#.#..
#.##...#.##.##...##....#....####.##..#....#..##....#..#.##.......######.#.##.###.##....#.#.#.....##.
#####.#.....###....##..#####..#.#.##.##.#.#.#...####.###.###..#....#...##.#.#....#..####.#...###..##
#.#####..##...######.######....#.#.#..##.##.######..##...#...####..##.##.#.#....#.#.#.#..#...#...#..
.###.#.##.#.#.##.##....#..####.#..##.#.##....###.##...#....#..###..##.#########..##.......##.....#.#
##..#.##..#..#.#.#..#...##...##########...##.##..#..#.#.###########.....#######....#....#.###.#...#.
...##.#..##...#..#.##...###...####.#...#####.####..#.###..###....###..#..#####.#.##.#.##....#......#
..##..##...###.#.#.#..#.#####..#.##..#..#...###.###..##....#.#.##...###..#.###..#.#.##.###.##....###
.#.#.#######.#..#.....#.##.###...##.##.###.##..##...###..#.##...###.#..##..###.#.####.#..##..##...#.
#.####.#.#....###...###....##...##.....#.###.#.....#..#...#..####.#...#..#######...###.#........#...
..##...#.#..###..##..#.#..####.#...#.##.#...#.#..###..#.##.#.#.#...###..######....#.###.#.#.#..##.#.
###.#.#.....###..#....###.#.......##...#..#.###..###.#......#...##..#.#..###..#.##.#.##.######.#.#.#
#...###.#.#....#.####....##.###...##..##....#####....#......#.#.......###...#.#..#.#....#....####.#.
#.#.##.######..#.#.######.#...#..###.#..####..#.##..###.#.#.#.###..#..#.#....#..#.##.#..##.####.##.#
#.##.#.###...#.##.#..#.#....#.####...#.###...#..###......#.########....#.#####..#.#.#..#...#.####.#.
####...#.#.##.###...##.#....#.#..######.#.######.#.##.#.#.#..#...#.###.#..#.####.#..#.#....#....#.##
##.##.....#.##..#......#....###.#..#######.#...##..#.#...##..##.#.#..##.###.######.....###.##.##..##
..####.##.#####....#.#..#.#.#.########.#.###........#..###...###........####.##.##.#.#..#.##.....#.#
...#.#..#.#.###.....##.#.##.#.##..#.##..#..####........###..####..##..#.####..#...#.####.##.#.#.##.#
.##.#.#..#####..#####.#.....##.#.####.#.###..#..##.#..####.###.##.###.###.#..#..##....#.##.....#.#..
.#...####..##.###....##..#..##.###..#..##....#...##.###.###.#...##..###.#..##.#.##...##.##.#..##.#..
.#.##.##.####.###.#.#..##.....####.##..######.###..#.#.##..##.#.#.....#.#############..#..#..###..##
.#.#..###...###..###.#....###.....##.#.#..###..####..##.##.#.##...########..##..####.##.##.##.#.#...
...#.##.###.#..#..##...#..##..#.....##..#.#..###..#...#...##.#.#..#.###.#####..#.....##...###.######
##...#..##.#.##.##...#.....#....#...##.###...#####..#..##.##.###..#.###.##..#.#..##.##..#.#...######
.##.#..###.###....#.###.#..#..#..##...############...#########.#..#.###...###....#..#.########.#.##.
.........###..##.####.#.#...#..##.#...###....###.##.######.#..#.#..###.###.#.###.##.##.##..#.#.#.#..
.##....###.#.###.#.#..##...#.#...#.##....###...##.#..#######....##..#...#...#....##.##..####.######.
###.####...##.#.###.....#..######....###..#.#.#..#######..#..#.##.#.####.###.#....#..#.#...##..#.#..
##..#.#####.###...#..#.......###.###..##.....##...#.##.##..###.####..#...#.#.##.#.#...##....#.##.###
#...####......###.##..#..####.##.#.###.##.#.#....#.....#..#...###..##..##..#.##..###.#.##.###....#..
#..##.#..####...##.##.####..#....#......###...##.#.#..#.#.....#..##..###..#.##.##.#..####..##.#.####
....#..#......##....###...#.##..##.#...#.....#..##.#.###..#...#...........##..#####....#..#.##...#..
...#..####.#.#####.####...#..#..#..###.#.#.#.##.##......#.####........##.#.....#..###.#..#..##..###.
#######.#.#..#.##..#.#.##.#..#..#......#.#..####....#####.#.....###.#.#..##.#..#..##.#..###..#.###.#
#....#.#.##.##...#..##.####....###....#...#..###..##.######...#.##.##.##.#.#.#.#####.##.#.####.###.#
...#.#..#..#....#...###..#.#..#...#..##...#..##.#.###.#.##...#####......#.##.#..#.###..##.##...#.#.#
.#.##.....#####.#.#####..###.#.###....##...#.....##...###.##.#.#.#...##.......###....##..##...##....
####.#...##.#####.##..####.########...#..#..#....#.##.###..###.##.##..###.###.######..##...#......##
.##...###..###..#.####.##.##...#.....####.###.##.#.##..#.#.#.#.#....##.#######.##.##..#...#....#####
.###.##....#.#......#.##....#..###.##..##..##..##..#.......#..#.#.###...#..####.##.#.##..###..##.##.
....######.#..#.##.##.#####..#.##.#.#.#.##..#..#.########.#####..###.###.#...#..##.#......##.#.#.#..
.#.#.#...###.#.#.#....###.####..#.##....#......#...#.#.##.##.#..###.....#.#.##..##.#..###.#.#.####..
##....########.#..#####...#.....##.#.....##.#...####..####..#......##...#..#..##..#..#.##..###..##.#
##..####.#####.#.#.#.#.###.###..#..#...##.#.#....#.#..#.#.###..#.##...#.#.##.#.##.##....#..######.##
#..#.....#.#..#.#.#..##..#....#.#.###.#.#..#..###..#.#...###..##...####.##..#..#...#.#...###.##..##.
...#..#...####.##.###.#####.###.##..###.#....##..##...#.###.#...#...#.............##...####.####.#.#
.###.##...##.#.###.#.#...##.#..#...#####..##.#.#...##.#######.####....####....#######.#...#.#.###...
....#.#...##.#.####.#####.#.######.#####.##...####...###.#.##.####..##.###.###....#.....#####.....#.
......##.#.#....#.#..##..#.#.###...##.##.####.#....##...##...##...#...#.###.#.##...#..####....##....
.#####..#.#####...##.#...###.#.#..#.#..##..#.#.#.##..#.##....###..###..#..##...##..#.###.#.##....###
#####....#.#...##.###.#....###.##.........#..##..###.#...######.#..#.#.########.....###.#.#...#.....
.##.#.#####.#..#.#.#.###...########.###..##.#..#.####.#...##.#....#...##.######..##....##....##.##..
###...##.##..####...#.#.#..##.....###..#..##..#.####.###..#.#.##.######...#.#...###.##..#....##.#.##
##..##.#..#..#.###.#..#..#....#..#....###.####.###...#.##.##.##......##.####...#.....#...#.#...#..#.
....#.##...#..##.##......#.#.#..####....#..#######.#...#...##..#......#.#........##.##....###....##.
##.#...#...##.###.###..####.#...#..##...##.###..#..###..#.....#...###..###.##..#..#####.....####.##.
.##.#...#..####..#.....##..###.#.#.#..#...##...###...#..##.....#..##...##..###.#..#####...##.#..###.
.#.#.#..####...#.###.###....##....#.#..#.#..#..#####.#..#...#.###.........##.####.####..#.##..##..#.
#..##.####.#..##....#.####.###...#.#..#####.##.#..#......###.##...#....#.##..#....##.#.....#.##.##.#
#..#..#.###.#..#.#.####.####..#.#.#..#.#...#....#######.####.............####..###.#..####.######.##
.#....####...#...#...#..#..##......#######.###.##..####.##.####.#####....##.###.#.###..#.#....#...#.

55
2021/day20/main.go Normal file
View File

@@ -0,0 +1,55 @@
package main
import (
"fmt"
h "git.bullercodeworks.com/brian/adventofcode/helpers"
)
func main() {
inp := h.StdinToStringSlice()
enhancement, inputImage := inp[0], h.StringSliceToCoordByteMap(inp[2:])
fmt.Println("# Part 1")
run(inputImage, enhancement, 2)
fmt.Println()
fmt.Println("# Part 2")
run(inputImage, enhancement, 50)
}
func run(image h.CoordByteMap, enhancement string, iters int) {
bg := byte('.')
for i := 0; i < iters; i++ {
image = enhance(image, enhancement, bg)
if bg == '#' {
bg = enhancement[511]
} else {
bg = enhancement[0]
}
}
fmt.Println("Lit pixels:", image.Count('#'))
}
func enhance(image h.CoordByteMap, enhancement string, bg byte) h.CoordByteMap {
pxToInt := func(c h.Coordinate) int {
var num int
for bldY := c.Y - 1; bldY <= c.Y+1; bldY++ {
for bldX := c.X - 1; bldX <= c.X+1; bldX++ {
num = num << 1
v := image.Opt(h.Coordinate{X: bldX, Y: bldY}, bg)
if v == '#' {
num |= 1
}
}
}
return num
}
next := h.NewCoordByteMap()
for y := image.TLY - 1; y <= image.BRY+1; y++ {
for x := image.TLX - 1; x <= image.BRX+1; x++ {
c := h.Coordinate{X: x, Y: y}
nv := enhancement[pxToInt(c)]
next.Put(c, nv)
}
}
return next
}

7
2021/day20/testinput Normal file
View File

@@ -0,0 +1,7 @@
..#.#..#####.#.#.#.###.##.....###.##.#..###.####..#####..#....#..#..##..###..######.###...####..#..#####..##..#.#####...##.#.#..#.##..#.#......#.###.######.###.####...#.##.##..#..#..#####.....#.#....###..#.##......#.....#..#..#..##..#...##.######.####.####.#.#...#.......#..#.#.#...####.##.#......#..#...##.#.##..#...##.#.##..###.#......#.#.......#.#.#.####.###.##...#.....####.#..#..#.##.#....##..#.####....##...##..#...#......#.#.......#.......##..####..#...#.#.#...##..#.#..###..#####........#..####......#..#
#..#.
#....
##..#
..#..
..###