186 lines
8.0 KiB
Plaintext
186 lines
8.0 KiB
Plaintext
Advent of Code
|
|
br0xen [7](AoC++) 20*
|
|
|
|
--- Day 10: Factory ---
|
|
|
|
Just across the hall, you find a large factory. Fortunately, the Elves
|
|
here have plenty of time to decorate. Unfortunately, it's because the
|
|
factory machines are all offline, and none of the Elves can figure out the
|
|
initialization procedure.
|
|
|
|
The Elves do have the manual for the machines, but the section detailing
|
|
the initialization procedure was eaten by a [16]Shiba Inu. All that
|
|
remains of the manual are some indicator light diagrams, button wiring
|
|
schematics, and [17]joltage requirements for each machine.
|
|
|
|
For example:
|
|
|
|
[.##.] (3) (1,3) (2) (2,3) (0,2) (0,1) {3,5,4,7}
|
|
[...#.] (0,2,3,4) (2,3) (0,4) (0,1,2) (1,2,3,4) {7,5,12,7,2}
|
|
[.###.#] (0,1,2,3,4) (0,3,4) (0,1,2,4,5) (1,2) {10,11,11,5,10,5}
|
|
|
|
The manual describes one machine per line. Each line contains a single
|
|
indicator light diagram in [square brackets], one or more button wiring
|
|
schematics in (parentheses), and joltage requirements in {curly braces}.
|
|
|
|
To start a machine, its indicator lights must match those shown in the
|
|
diagram, where . means off and # means on. The machine has the number of
|
|
indicator lights shown, but its indicator lights are all initially off.
|
|
|
|
So, an indicator light diagram like [.##.] means that the machine has four
|
|
indicator lights which are initially off and that the goal is to
|
|
simultaneously configure the first light to be off, the second light to be
|
|
on, the third to be on, and the fourth to be off.
|
|
|
|
You can toggle the state of indicator lights by pushing any of the listed
|
|
buttons. Each button lists which indicator lights it toggles, where 0
|
|
means the first light, 1 means the second light, and so on. When you push
|
|
a button, each listed indicator light either turns on (if it was off) or
|
|
turns off (if it was on). You have to push each button an integer number
|
|
of times; there's no such thing as "0.5 presses" (nor can you push a
|
|
button a negative number of times).
|
|
|
|
So, a button wiring schematic like (0,3,4) means that each time you push
|
|
that button, the first, fourth, and fifth indicator lights would all
|
|
toggle between on and off. If the indicator lights were [#.....], pushing
|
|
the button would change them to be [...##.] instead.
|
|
|
|
Because none of the machines are running, the joltage requirements are
|
|
irrelevant and can be safely ignored.
|
|
|
|
You can push each button as many times as you like. However, to save on
|
|
time, you will need to determine the fewest total presses required to
|
|
correctly configure all indicator lights for all machines in your list.
|
|
|
|
There are a few ways to correctly configure the first machine:
|
|
|
|
[.##.] (3) (1,3) (2) (2,3) (0,2) (0,1) {3,5,4,7}
|
|
|
|
• You could press the first three buttons once each, a total of 3 button
|
|
presses.
|
|
• You could press (1,3) once, (2,3) once, and (0,1) twice, a total of 4
|
|
button presses.
|
|
• You could press all of the buttons except (1,3) once each, a total of
|
|
5 button presses.
|
|
|
|
However, the fewest button presses required is 2. One way to do this is by
|
|
pressing the last two buttons ((0,2) and (0,1)) once each.
|
|
|
|
The second machine can be configured with as few as 3 button presses:
|
|
|
|
[...#.] (0,2,3,4) (2,3) (0,4) (0,1,2) (1,2,3,4) {7,5,12,7,2}
|
|
|
|
One way to achieve this is by pressing the last three buttons ((0,4),
|
|
(0,1,2), and (1,2,3,4)) once each.
|
|
|
|
The third machine has a total of six indicator lights that need to be
|
|
configured correctly:
|
|
|
|
[.###.#] (0,1,2,3,4) (0,3,4) (0,1,2,4,5) (1,2) {10,11,11,5,10,5}
|
|
|
|
The fewest presses required to correctly configure it is 2; one way to do
|
|
this is by pressing buttons (0,3,4) and (0,1,2,4,5) once each.
|
|
|
|
So, the fewest button presses required to correctly configure the
|
|
indicator lights on all of the machines is 2 + 3 + 2 = 7.
|
|
|
|
Analyze each machine's indicator light diagram and button wiring
|
|
schematics. What is the fewest button presses required to correctly
|
|
configure the indicator lights on all of the machines?
|
|
|
|
Your puzzle answer was 455.
|
|
|
|
--- Part Two ---
|
|
|
|
All of the machines are starting to come online! Now, it's time to worry
|
|
about the joltage requirements.
|
|
|
|
Each machine needs to be configured to exactly the specified joltage
|
|
levels to function properly. Below the buttons on each machine is a big
|
|
lever that you can use to switch the buttons from configuring the
|
|
indicator lights to increasing the joltage levels. (Ignore the indicator
|
|
light diagrams.)
|
|
|
|
The machines each have a set of numeric counters tracking its joltage
|
|
levels, one counter per joltage requirement. The counters are all
|
|
initially set to zero.
|
|
|
|
So, joltage requirements like {3,5,4,7} mean that the machine has four
|
|
counters which are initially 0 and that the goal is to simultaneously
|
|
configure the first counter to be 3, the second counter to be 5, the third
|
|
to be 4, and the fourth to be 7.
|
|
|
|
The button wiring schematics are still relevant: in this new joltage
|
|
configuration mode, each button now indicates which counters it affects,
|
|
where 0 means the first counter, 1 means the second counter, and so on.
|
|
When you push a button, each listed counter is increased by 1.
|
|
|
|
So, a button wiring schematic like (1,3) means that each time you push
|
|
that button, the second and fourth counters would each increase by 1. If
|
|
the current joltage levels were {0,1,2,3}, pushing the button would change
|
|
them to be {0,2,2,4}.
|
|
|
|
You can push each button as many times as you like. However, your finger
|
|
is getting sore from all the button pushing, and so you will need to
|
|
determine the fewest total presses required to correctly configure each
|
|
machine's joltage level counters to match the specified joltage
|
|
requirements.
|
|
|
|
Consider again the example from before:
|
|
|
|
[.##.] (3) (1,3) (2) (2,3) (0,2) (0,1) {3,5,4,7}
|
|
[...#.] (0,2,3,4) (2,3) (0,4) (0,1,2) (1,2,3,4) {7,5,12,7,2}
|
|
[.###.#] (0,1,2,3,4) (0,3,4) (0,1,2,4,5) (1,2) {10,11,11,5,10,5}
|
|
|
|
Configuring the first machine's counters requires a minimum of 10 button
|
|
presses. One way to do this is by pressing (3) once, (1,3) three times,
|
|
(2,3) three times, (0,2) once, and (0,1) twice.
|
|
|
|
Configuring the second machine's counters requires a minimum of 12 button
|
|
presses. One way to do this is by pressing (0,2,3,4) twice, (2,3) five
|
|
times, and (0,1,2) five times.
|
|
|
|
Configuring the third machine's counters requires a minimum of 11 button
|
|
presses. One way to do this is by pressing (0,1,2,3,4) five times,
|
|
(0,1,2,4,5) five times, and (1,2) once.
|
|
|
|
So, the fewest button presses required to correctly configure the joltage
|
|
level counters on all of the machines is 10 + 12 + 11 = 33.
|
|
|
|
Analyze each machine's joltage requirements and button wiring schematics.
|
|
What is the fewest button presses required to correctly configure the
|
|
joltage level counters on all of the machines?
|
|
|
|
Your puzzle answer was 16978.
|
|
|
|
Both parts of this puzzle are complete! They provide two gold stars: **
|
|
|
|
At this point, you should [18]return to your Advent calendar and try
|
|
another puzzle.
|
|
|
|
If you still want to see it, you can [19]get your puzzle input.
|
|
|
|
References
|
|
|
|
Visible links
|
|
1. https://adventofcode.com/
|
|
2. https://adventofcode.com/2025/about
|
|
3. https://adventofcode.com/2025/events
|
|
4. https://adventofcode.com/2025/shop
|
|
5. https://adventofcode.com/2025/settings
|
|
6. https://adventofcode.com/2025/auth/logout
|
|
7. Advent of Code Supporter
|
|
https://adventofcode.com/2025/support
|
|
8. https://adventofcode.com/2025
|
|
9. https://adventofcode.com/2025
|
|
10. https://adventofcode.com/2025/support
|
|
11. https://adventofcode.com/2025/sponsors
|
|
12. https://adventofcode.com/2025/leaderboard/private
|
|
13. https://adventofcode.com/2025/stats
|
|
14. https://adventofcode.com/2025/sponsors
|
|
15. https://adventofcode.com/2025/sponsors/redirect?url=https%3A%2F%2Fcoderabbit%2Elink%2Fadventofcode
|
|
16. https://en.wikipedia.org/wiki/Shiba_Inu
|
|
17. https://adventofcode.com/2025/day/3
|
|
18. https://adventofcode.com/2025
|
|
19. https://adventofcode.com/2025/day/10/input
|