85 lines
3.6 KiB
Plaintext
85 lines
3.6 KiB
Plaintext
|
Advent of Code
|
||
|
|
||
|
--- Day 21: Chronal Conversion ---
|
||
|
|
||
|
You should have been watching where you were going, because as you wander the
|
||
|
new North Pole base, you trip and fall into a very deep hole!
|
||
|
|
||
|
Just kidding. You're falling through time again.
|
||
|
|
||
|
If you keep up your current pace, you should have resolved all of the temporal
|
||
|
anomalies by the next time the device activates. Since you have very little
|
||
|
interest in browsing history in 500-year increments for the rest of your life,
|
||
|
you need to find a way to get back to your present time.
|
||
|
|
||
|
After a little research, you discover two important facts about the behavior
|
||
|
of the device:
|
||
|
|
||
|
First, you discover that the device is hard-wired to always send you back in
|
||
|
time in 500-year increments. Changing this is probably not feasible.
|
||
|
|
||
|
Second, you discover the activation system (your puzzle input) for the time
|
||
|
travel module. Currently, it appears to run forever without halting.
|
||
|
|
||
|
If you can cause the activation system to halt at a specific moment, maybe you
|
||
|
can make the device send you so far back in time that you cause an integer
|
||
|
underflow in time itself and wrap around back to your current time!
|
||
|
|
||
|
The device executes the program as specified in manual section one and manual
|
||
|
section two.
|
||
|
|
||
|
Your goal is to figure out how the program works and cause it to halt. You can
|
||
|
only control register 0; every other register begins at 0 as usual.
|
||
|
|
||
|
Because time travel is a dangerous activity, the activation system begins with
|
||
|
a few instructions which verify that bitwise AND (via bani) does a numeric
|
||
|
operation and not an operation as if the inputs were interpreted as strings.
|
||
|
If the test fails, it enters an infinite loop re-running the test instead of
|
||
|
allowing the program to execute normally. If the test passes, the program
|
||
|
continues, and assumes that all other bitwise operations (banr, bori, and
|
||
|
borr) also interpret their inputs as numbers. (Clearly, the Elves who wrote
|
||
|
this system were worried that someone might introduce a bug while trying to
|
||
|
emulate this system with a scripting language.)
|
||
|
|
||
|
What is the lowest non-negative integer value for register 0 that causes the
|
||
|
program to halt after executing the fewest instructions? (Executing the same
|
||
|
instruction multiple times counts as multiple instructions executed.)
|
||
|
|
||
|
Your puzzle answer was 7967233.
|
||
|
|
||
|
--- Part Two ---
|
||
|
|
||
|
In order to determine the timing window for your underflow exploit, you also
|
||
|
need an upper bound:
|
||
|
|
||
|
What is the lowest non-negative integer value for register 0 that causes the
|
||
|
program to halt after executing the most instructions? (The program must
|
||
|
actually halt; running forever does not count as halting.)
|
||
|
|
||
|
Your puzzle answer was 16477902.
|
||
|
|
||
|
Both parts of this puzzle are complete! They provide two gold stars: **
|
||
|
|
||
|
References
|
||
|
|
||
|
Visible links
|
||
|
. https://adventofcode.com/
|
||
|
. https://adventofcode.com/2018/about
|
||
|
. https://adventofcode.com/2018/events
|
||
|
. https://adventofcode.com/2018/settings
|
||
|
. https://adventofcode.com/2018/auth/logout
|
||
|
. Advent of Code Supporter
|
||
|
https://adventofcode.com/2018/support
|
||
|
. https://adventofcode.com/2018
|
||
|
. https://adventofcode.com/2018
|
||
|
. https://adventofcode.com/2018/support
|
||
|
. https://adventofcode.com/2018/sponsors
|
||
|
. https://adventofcode.com/2018/leaderboard
|
||
|
. https://adventofcode.com/2018/stats
|
||
|
. https://adventofcode.com/2018/sponsors
|
||
|
. https://cwe.mitre.org/data/definitions/191.html
|
||
|
. https://adventofcode.com/2018/day/16
|
||
|
. https://adventofcode.com/2018/day/19
|
||
|
. https://adventofcode.com/2018
|
||
|
. https://adventofcode.com/2018/day/21/input
|