140 lines
5.5 KiB
Plaintext
140 lines
5.5 KiB
Plaintext
Advent of Code
|
||
|
||
--- Day 25: The Halting Problem ---
|
||
|
||
Following the twisty passageways deeper and deeper into the CPU, you finally
|
||
reach the core of the computer. Here, in the expansive central chamber, you
|
||
find a grand apparatus that fills the entire room, suspended nanometers
|
||
above your head.
|
||
|
||
You had always imagined CPUs to be noisy, chaotic places, bustling with
|
||
activity. Instead, the room is quiet, motionless, and dark.
|
||
|
||
Suddenly, you and the CPU's garbage collector startle each other. "It's not
|
||
often we get many visitors here!", he says. You inquire about the stopped
|
||
machinery.
|
||
|
||
"It stopped milliseconds ago; not sure why. I'm a garbage collector, not a
|
||
doctor." You ask what the machine is for.
|
||
|
||
"Programs these days, don't know their origins. That's the Turing machine!
|
||
It's what makes the whole computer work." You try to explain that Turing
|
||
machines are merely models of computation, but he cuts you off. "No, see,
|
||
that's just what they want you to think. Ultimately, inside every CPU,
|
||
there's a Turing machine driving the whole thing! Too bad this one's broken.
|
||
We're doomed!"
|
||
|
||
You ask how you can help. "Well, unfortunately, the only way to get the
|
||
computer running again would be to create a whole new Turing machine from
|
||
scratch, but there's no way you can-" He notices the look on your face,
|
||
gives you a curious glance, shrugs, and goes back to sweeping the floor.
|
||
|
||
You find the Turing machine blueprints (your puzzle input) on a tablet in a
|
||
nearby pile of debris. Looking back up at the broken Turing machine above,
|
||
you can start to identify its parts:
|
||
|
||
• A tape which contains 0 repeated infinitely to the left and right.
|
||
|
||
• A cursor, which can move left or right along the tape and read or write
|
||
values at its current position.
|
||
|
||
• A set of states, each containing rules about what to do based on the
|
||
current value under the cursor.
|
||
|
||
Each slot on the tape has two possible values: 0 (the starting value for all
|
||
slots) and 1. Based on whether the cursor is pointing at a 0 or a 1, the
|
||
current state says what value to write at the current position of the
|
||
cursor, whether to move the cursor left or right one slot, and which state
|
||
to use next.
|
||
|
||
For example, suppose you found the following blueprint:
|
||
|
||
Begin in state A.
|
||
Perform a diagnostic checksum after 6 steps.
|
||
|
||
In state A:
|
||
If the current value is 0:
|
||
- Write the value 1.
|
||
- Move one slot to the right.
|
||
- Continue with state B.
|
||
If the current value is 1:
|
||
- Write the value 0.
|
||
- Move one slot to the left.
|
||
- Continue with state B.
|
||
|
||
In state B:
|
||
If the current value is 0:
|
||
- Write the value 1.
|
||
- Move one slot to the left.
|
||
- Continue with state A.
|
||
If the current value is 1:
|
||
- Write the value 1.
|
||
- Move one slot to the right.
|
||
- Continue with state A.
|
||
|
||
Running it until the number of steps required to take the listed diagnostic
|
||
checksum would result in the following tape configurations (with the cursor
|
||
marked in square brackets):
|
||
|
||
... 0 0 0 [0] 0 0 ... (before any steps; about to run state A)
|
||
... 0 0 0 1 [0] 0 ... (after 1 step; about to run state B)
|
||
... 0 0 0 [1] 1 0 ... (after 2 steps; about to run state A)
|
||
... 0 0 [0] 0 1 0 ... (after 3 steps; about to run state B)
|
||
... 0 [0] 1 0 1 0 ... (after 4 steps; about to run state A)
|
||
... 0 1 [1] 0 1 0 ... (after 5 steps; about to run state B)
|
||
... 0 1 1 [0] 1 0 ... (after 6 steps; about to run state A)
|
||
|
||
The CPU can confirm that the Turing machine is working by taking a
|
||
diagnostic checksum after a specific number of steps (given in the
|
||
blueprint). Once the specified number of steps have been executed, the
|
||
Turing machine should pause; once it does, count the number of times 1
|
||
appears on the tape. In the above example, the diagnostic checksum is 3.
|
||
|
||
Recreate the Turing machine and save the computer! What is the diagnostic
|
||
checksum it produces once it's working again?
|
||
|
||
Your puzzle answer was 5593.
|
||
|
||
--- Part Two ---
|
||
|
||
The Turing machine, and soon the entire computer, springs back to life. A
|
||
console glows dimly nearby, awaiting your command.
|
||
|
||
> reboot printer
|
||
Error: That command requires priority 50. You currently have priority 0.
|
||
You must deposit 50 stars to increase your priority to the required level.
|
||
|
||
The console flickers for a moment, and then prints another message:
|
||
|
||
Star accepted.
|
||
You must deposit 49 stars to increase your priority to the required level.
|
||
|
||
The garbage collector winks at you, then continues sweeping.
|
||
|
||
If you like, you can [ [Reboot the Printer Again] ] .
|
||
|
||
Both parts of this puzzle are complete! They provide two gold stars: **
|
||
|
||
At this point, all that is left is for you to admire your advent calendar.
|
||
|
||
If you still want to see it, you can get your puzzle input.
|
||
|
||
References
|
||
|
||
Visible links
|
||
. http://adventofcode.com/
|
||
. http://adventofcode.com/2017/about
|
||
. http://adventofcode.com/2017/support
|
||
. http://adventofcode.com/2017/events
|
||
. http://adventofcode.com/2017/settings
|
||
. http://adventofcode.com/2017/auth/logout
|
||
. http://adventofcode.com/2017
|
||
. http://adventofcode.com/2017
|
||
. http://adventofcode.com/2017/leaderboard
|
||
. http://adventofcode.com/2017/stats
|
||
. http://adventofcode.com/2017/sponsors
|
||
. http://adventofcode.com/2017/sponsors
|
||
. https://www.youtube.com/watch?v=cTwZZz0HV8I
|
||
. http://adventofcode.com/2017
|
||
. http://adventofcode.com/2017/day/25/input
|