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
 |