2021 Day 11 Complete!
This commit is contained in:
parent
e45541cef7
commit
6c3dc59afc
10
2021/day11/input
Normal file
10
2021/day11/input
Normal file
@ -0,0 +1,10 @@
|
||||
4836484555
|
||||
4663841772
|
||||
3512484556
|
||||
1481547572
|
||||
7741183422
|
||||
8683222882
|
||||
4215244233
|
||||
1544712171
|
||||
5725855786
|
||||
1717382281
|
103
2021/day11/main.go
Normal file
103
2021/day11/main.go
Normal file
@ -0,0 +1,103 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
h "git.bullercodeworks.com/brian/adventofcode/helpers"
|
||||
)
|
||||
|
||||
func main() {
|
||||
inp := h.StdinToStringSlice()
|
||||
part1(h.StringSliceToCoordByteMap(inp))
|
||||
part2(h.StringSliceToCoordByteMap(inp))
|
||||
}
|
||||
|
||||
func part1(m h.CoordByteMap) {
|
||||
var count int
|
||||
for i := 0; i < 100; i++ {
|
||||
var wrk int
|
||||
m, wrk = step(m)
|
||||
count += wrk
|
||||
}
|
||||
fmt.Println("# Part 1")
|
||||
fmt.Println("Total Flashes", count)
|
||||
}
|
||||
|
||||
func part2(m h.CoordByteMap) {
|
||||
var count int
|
||||
var steps int
|
||||
for count != len(m.Field) {
|
||||
if steps%1000 == 0 {
|
||||
fmt.Print("O")
|
||||
} else if steps%100 == 0 {
|
||||
fmt.Print("o")
|
||||
} else if steps%10 == 0 {
|
||||
fmt.Print(".")
|
||||
}
|
||||
m, count = step(m)
|
||||
steps++
|
||||
}
|
||||
fmt.Println()
|
||||
fmt.Println("# Part 2")
|
||||
fmt.Println("Synchronized after", steps, "steps")
|
||||
}
|
||||
|
||||
func step(m h.CoordByteMap) (h.CoordByteMap, int) {
|
||||
var flashes []h.Coordinate
|
||||
for y := 0; y < m.Height; y++ {
|
||||
for x := 0; x < m.Width; x++ {
|
||||
c := h.Coordinate{X: x, Y: y}
|
||||
v := m.Get(c)
|
||||
switch v {
|
||||
case 0:
|
||||
continue
|
||||
case '9':
|
||||
m.Put(c, '.')
|
||||
flashes = append(flashes, c)
|
||||
default:
|
||||
m.Put(c, v+1)
|
||||
}
|
||||
}
|
||||
}
|
||||
for len(flashes) > 0 {
|
||||
var next []h.Coordinate
|
||||
for i := range flashes {
|
||||
var wrk []h.Coordinate
|
||||
m, wrk = flash(flashes[i], m)
|
||||
next = append(next, wrk...)
|
||||
}
|
||||
flashes = next
|
||||
}
|
||||
var flashCount int
|
||||
for y := 0; y < m.Height; y++ {
|
||||
for x := 0; x < m.Width; x++ {
|
||||
c := h.Coordinate{X: x, Y: y}
|
||||
if m.Get(c) == 'o' {
|
||||
m.Put(c, '0')
|
||||
flashCount++
|
||||
}
|
||||
}
|
||||
}
|
||||
return m, flashCount
|
||||
}
|
||||
|
||||
func flash(c h.Coordinate, m h.CoordByteMap) (h.CoordByteMap, []h.Coordinate) {
|
||||
var flashes []h.Coordinate
|
||||
m.Put(c, 'o')
|
||||
for _, n := range []h.Coordinate{c.North(), c.NE(), c.East(), c.SE(), c.South(), c.SW(), c.West(), c.NW()} {
|
||||
v := m.Get(n)
|
||||
switch v {
|
||||
case 0, '.', 'o':
|
||||
continue
|
||||
case '9':
|
||||
m.Put(n, '.')
|
||||
flashes = append(flashes, n)
|
||||
default:
|
||||
m.Put(n, v+1)
|
||||
}
|
||||
if v == 0 {
|
||||
continue
|
||||
}
|
||||
}
|
||||
return m, flashes
|
||||
}
|
386
2021/day11/problem
Normal file
386
2021/day11/problem
Normal file
@ -0,0 +1,386 @@
|
||||
# Advent of Code
|
||||
|
||||
--- Day 11: Dumbo Octopus ---
|
||||
|
||||
You enter a large cavern full of rare bioluminescent dumbo octopuses! They seem to not like the Christmas lights on your submarine, so you turn
|
||||
them off for now.
|
||||
|
||||
There are 100 octopuses arranged neatly in a 10 by 10 grid. Each octopus slowly gains energy over time and flashes brightly for a moment when its
|
||||
energy is full. Although your lights are off, maybe you could navigate through the cave without disturbing the octopuses if you could predict
|
||||
when the flashes of light will happen.
|
||||
|
||||
Each octopus has an energy level - your submarine can remotely measure the energy level of each octopus (your puzzle input). For example:
|
||||
|
||||
5483143223
|
||||
2745854711
|
||||
5264556173
|
||||
6141336146
|
||||
6357385478
|
||||
4167524645
|
||||
2176841721
|
||||
6882881134
|
||||
4846848554
|
||||
5283751526
|
||||
|
||||
The energy level of each octopus is a value between 0 and 9. Here, the top-left octopus has an energy level of 5, the bottom-right one has an
|
||||
energy level of 6, and so on.
|
||||
|
||||
You can model the energy levels and flashes of light in steps. During a single step, the following occurs:
|
||||
|
||||
• First, the energy level of each octopus increases by 1.
|
||||
• Then, any octopus with an energy level greater than 9 flashes. This increases the energy level of all adjacent octopuses by 1, including
|
||||
octopuses that are diagonally adjacent. If this causes an octopus to have an energy level greater than 9, it also flashes. This process
|
||||
continues as long as new octopuses keep having their energy level increased beyond 9. (An octopus can only flash at most once per step.)
|
||||
• Finally, any octopus that flashed during this step has its energy level set to 0, as it used all of its energy to flash.
|
||||
|
||||
Adjacent flashes can cause an octopus to flash on a step even if it begins that step with very little energy. Consider the middle octopus with 1
|
||||
energy in this situation:
|
||||
|
||||
Before any steps:
|
||||
11111
|
||||
19991
|
||||
19191
|
||||
19991
|
||||
11111
|
||||
|
||||
After step 1:
|
||||
34543
|
||||
40004
|
||||
50005
|
||||
40004
|
||||
34543
|
||||
|
||||
After step 2:
|
||||
45654
|
||||
51115
|
||||
61116
|
||||
51115
|
||||
45654
|
||||
|
||||
An octopus is highlighted when it flashed during the given step.
|
||||
|
||||
Here is how the larger example above progresses:
|
||||
|
||||
Before any steps:
|
||||
5483143223
|
||||
2745854711
|
||||
5264556173
|
||||
6141336146
|
||||
6357385478
|
||||
4167524645
|
||||
2176841721
|
||||
6882881134
|
||||
4846848554
|
||||
5283751526
|
||||
|
||||
After step 1:
|
||||
6594254334
|
||||
3856965822
|
||||
6375667284
|
||||
7252447257
|
||||
7468496589
|
||||
5278635756
|
||||
3287952832
|
||||
7993992245
|
||||
5957959665
|
||||
6394862637
|
||||
|
||||
After step 2:
|
||||
8807476555
|
||||
5089087054
|
||||
8597889608
|
||||
8485769600
|
||||
8700908800
|
||||
6600088989
|
||||
6800005943
|
||||
0000007456
|
||||
9000000876
|
||||
8700006848
|
||||
|
||||
After step 3:
|
||||
0050900866
|
||||
8500800575
|
||||
9900000039
|
||||
9700000041
|
||||
9935080063
|
||||
7712300000
|
||||
7911250009
|
||||
2211130000
|
||||
0421125000
|
||||
0021119000
|
||||
|
||||
After step 4:
|
||||
2263031977
|
||||
0923031697
|
||||
0032221150
|
||||
0041111163
|
||||
0076191174
|
||||
0053411122
|
||||
0042361120
|
||||
5532241122
|
||||
1532247211
|
||||
1132230211
|
||||
|
||||
After step 5:
|
||||
4484144000
|
||||
2044144000
|
||||
2253333493
|
||||
1152333274
|
||||
1187303285
|
||||
1164633233
|
||||
1153472231
|
||||
6643352233
|
||||
2643358322
|
||||
2243341322
|
||||
|
||||
After step 6:
|
||||
5595255111
|
||||
3155255222
|
||||
3364444605
|
||||
2263444496
|
||||
2298414396
|
||||
2275744344
|
||||
2264583342
|
||||
7754463344
|
||||
3754469433
|
||||
3354452433
|
||||
|
||||
After step 7:
|
||||
6707366222
|
||||
4377366333
|
||||
4475555827
|
||||
3496655709
|
||||
3500625609
|
||||
3509955566
|
||||
3486694453
|
||||
8865585555
|
||||
4865580644
|
||||
4465574644
|
||||
|
||||
After step 8:
|
||||
7818477333
|
||||
5488477444
|
||||
5697666949
|
||||
4608766830
|
||||
4734946730
|
||||
4740097688
|
||||
6900007564
|
||||
0000009666
|
||||
8000004755
|
||||
6800007755
|
||||
|
||||
After step 9:
|
||||
9060000644
|
||||
7800000976
|
||||
6900000080
|
||||
5840000082
|
||||
5858000093
|
||||
6962400000
|
||||
8021250009
|
||||
2221130009
|
||||
9111128097
|
||||
7911119976
|
||||
|
||||
After step 10:
|
||||
0481112976
|
||||
0031112009
|
||||
0041112504
|
||||
0081111406
|
||||
0099111306
|
||||
0093511233
|
||||
0442361130
|
||||
5532252350
|
||||
0532250600
|
||||
0032240000
|
||||
|
||||
After step 10, there have been a total of 204 flashes. Fast forwarding, here is the same configuration every 10 steps:
|
||||
|
||||
After step 20:
|
||||
3936556452
|
||||
5686556806
|
||||
4496555690
|
||||
4448655580
|
||||
4456865570
|
||||
5680086577
|
||||
7000009896
|
||||
0000000344
|
||||
6000000364
|
||||
4600009543
|
||||
|
||||
After step 30:
|
||||
0643334118
|
||||
4253334611
|
||||
3374333458
|
||||
2225333337
|
||||
2229333338
|
||||
2276733333
|
||||
2754574565
|
||||
5544458511
|
||||
9444447111
|
||||
7944446119
|
||||
|
||||
After step 40:
|
||||
6211111981
|
||||
0421111119
|
||||
0042111115
|
||||
0003111115
|
||||
0003111116
|
||||
0065611111
|
||||
0532351111
|
||||
3322234597
|
||||
2222222976
|
||||
2222222762
|
||||
|
||||
After step 50:
|
||||
9655556447
|
||||
4865556805
|
||||
4486555690
|
||||
4458655580
|
||||
4574865570
|
||||
5700086566
|
||||
6000009887
|
||||
8000000533
|
||||
6800000633
|
||||
5680000538
|
||||
|
||||
After step 60:
|
||||
2533334200
|
||||
2743334640
|
||||
2264333458
|
||||
2225333337
|
||||
2225333338
|
||||
2287833333
|
||||
3854573455
|
||||
1854458611
|
||||
1175447111
|
||||
1115446111
|
||||
|
||||
After step 70:
|
||||
8211111164
|
||||
0421111166
|
||||
0042111114
|
||||
0004211115
|
||||
0000211116
|
||||
0065611111
|
||||
0532351111
|
||||
7322235117
|
||||
5722223475
|
||||
4572222754
|
||||
|
||||
After step 80:
|
||||
1755555697
|
||||
5965555609
|
||||
4486555680
|
||||
4458655580
|
||||
4570865570
|
||||
5700086566
|
||||
7000008666
|
||||
0000000990
|
||||
0000000800
|
||||
0000000000
|
||||
|
||||
After step 90:
|
||||
7433333522
|
||||
2643333522
|
||||
2264333458
|
||||
2226433337
|
||||
2222433338
|
||||
2287833333
|
||||
2854573333
|
||||
4854458333
|
||||
3387779333
|
||||
3333333333
|
||||
|
||||
After step 100:
|
||||
0397666866
|
||||
0749766918
|
||||
0053976933
|
||||
0004297822
|
||||
0004229892
|
||||
0053222877
|
||||
0532222966
|
||||
9322228966
|
||||
7922286866
|
||||
6789998766
|
||||
|
||||
After 100 steps, there have been a total of 1656 flashes.
|
||||
|
||||
Given the starting energy levels of the dumbo octopuses in your cavern, simulate 100 steps. How many total flashes are there after 100 steps?
|
||||
|
||||
Your puzzle answer was 1659.
|
||||
|
||||
--- Part Two ---
|
||||
|
||||
It seems like the individual flashes aren't bright enough to navigate. However, you might have a better option: the flashes seem to be
|
||||
synchronizing!
|
||||
|
||||
In the example above, the first time all octopuses flash simultaneously is step 195:
|
||||
|
||||
After step 193:
|
||||
5877777777
|
||||
8877777777
|
||||
7777777777
|
||||
7777777777
|
||||
7777777777
|
||||
7777777777
|
||||
7777777777
|
||||
7777777777
|
||||
7777777777
|
||||
7777777777
|
||||
|
||||
After step 194:
|
||||
6988888888
|
||||
9988888888
|
||||
8888888888
|
||||
8888888888
|
||||
8888888888
|
||||
8888888888
|
||||
8888888888
|
||||
8888888888
|
||||
8888888888
|
||||
8888888888
|
||||
|
||||
After step 195:
|
||||
0000000000
|
||||
0000000000
|
||||
0000000000
|
||||
0000000000
|
||||
0000000000
|
||||
0000000000
|
||||
0000000000
|
||||
0000000000
|
||||
0000000000
|
||||
0000000000
|
||||
|
||||
If you can calculate the exact moments when the octopuses will all flash simultaneously, you should be able to navigate through the cavern. What
|
||||
is the first step during which all octopuses flash?
|
||||
|
||||
Your puzzle answer was 227.
|
||||
|
||||
Both parts of this puzzle are complete! They provide two gold stars: **
|
||||
|
||||
At this point, you should return to your Advent calendar and try another puzzle.
|
||||
|
||||
If you still want to see it, you can get your puzzle input.
|
||||
|
||||
References
|
||||
|
||||
Visible links
|
||||
. https://adventofcode.com/
|
||||
. https://adventofcode.com/2021/about
|
||||
. https://adventofcode.com/2021/events
|
||||
. https://adventofcode.com/2021/settings
|
||||
. https://adventofcode.com/2021/auth/logout
|
||||
. Advent of Code Supporter
|
||||
https://adventofcode.com/2021/support
|
||||
. https://adventofcode.com/2021
|
||||
. https://adventofcode.com/2021
|
||||
. https://adventofcode.com/2021/support
|
||||
. https://adventofcode.com/2021/sponsors
|
||||
. https://adventofcode.com/2021/leaderboard
|
||||
. https://adventofcode.com/2021/stats
|
||||
. https://adventofcode.com/2021/sponsors
|
||||
. https://www.youtube.com/watch?v=eih-VSaS2g0
|
||||
. https://adventofcode.com/2021
|
||||
. https://adventofcode.com/2021/day/11/input
|
||||
. javascript:void(0);
|
10
2021/day11/testinput
Normal file
10
2021/day11/testinput
Normal file
@ -0,0 +1,10 @@
|
||||
5483143223
|
||||
2745854711
|
||||
5264556173
|
||||
6141336146
|
||||
6357385478
|
||||
4167524645
|
||||
2176841721
|
||||
6882881134
|
||||
4846848554
|
||||
5283751526
|
Loading…
Reference in New Issue
Block a user