154 lines
5.4 KiB
Plaintext
154 lines
5.4 KiB
Plaintext
|
Advent of Code
|
|||
|
|
|||
|
--- Day 15: Dueling Generators ---
|
|||
|
|
|||
|
Here, you encounter a pair of dueling generators. The generators, called
|
|||
|
generator A and generator B, are trying to agree on a sequence of numbers.
|
|||
|
However, one of them is malfunctioning, and so the sequences don't always
|
|||
|
match.
|
|||
|
|
|||
|
As they do this, a judge waits for each of them to generate its next value,
|
|||
|
compares the lowest 16 bits of both values, and keeps track of the number of
|
|||
|
times those parts of the values match.
|
|||
|
|
|||
|
The generators both work on the same principle. To create its next value, a
|
|||
|
generator will take the previous value it produced, multiply it by a factor
|
|||
|
(generator A uses 16807; generator B uses 48271), and then keep the
|
|||
|
remainder of dividing that resulting product by 2147483647. That final
|
|||
|
remainder is the value it produces next.
|
|||
|
|
|||
|
To calculate each generator's first value, it instead uses a specific
|
|||
|
starting value as its "previous value" (as listed in your puzzle input).
|
|||
|
|
|||
|
For example, suppose that for starting values, generator A uses 65, while
|
|||
|
generator B uses 8921. Then, the first five pairs of generated values are:
|
|||
|
|
|||
|
--Gen. A-- --Gen. B--
|
|||
|
1092455 430625591
|
|||
|
1181022009 1233683848
|
|||
|
245556042 1431495498
|
|||
|
1744312007 137874439
|
|||
|
1352636452 285222916
|
|||
|
|
|||
|
In binary, these pairs are (with generator A's value first in each pair):
|
|||
|
|
|||
|
00000000000100001010101101100111
|
|||
|
00011001101010101101001100110111
|
|||
|
|
|||
|
01000110011001001111011100111001
|
|||
|
01001001100010001000010110001000
|
|||
|
|
|||
|
00001110101000101110001101001010
|
|||
|
01010101010100101110001101001010
|
|||
|
|
|||
|
01100111111110000001011011000111
|
|||
|
00001000001101111100110000000111
|
|||
|
|
|||
|
01010000100111111001100000100100
|
|||
|
00010001000000000010100000000100
|
|||
|
|
|||
|
Here, you can see that the lowest (here, rightmost) 16 bits of the third
|
|||
|
value match: 1110001101001010. Because of this one match, after processing
|
|||
|
these five pairs, the judge would have added only 1 to its total.
|
|||
|
|
|||
|
To get a significant sample, the judge would like to consider 40 million
|
|||
|
pairs. (In the example above, the judge would eventually find a total of 588
|
|||
|
pairs that match in their lowest 16 bits.)
|
|||
|
|
|||
|
After 40 million pairs, what is the judge's final count?
|
|||
|
|
|||
|
Your puzzle answer was 626.
|
|||
|
|
|||
|
--- Part Two ---
|
|||
|
|
|||
|
In the interest of trying to align a little better, the generators get more
|
|||
|
picky about the numbers they actually give to the judge.
|
|||
|
|
|||
|
They still generate values in the same way, but now they only hand a value
|
|||
|
to the judge when it meets their criteria:
|
|||
|
|
|||
|
• Generator A looks for values that are multiples of 4.
|
|||
|
• Generator B looks for values that are multiples of 8.
|
|||
|
|
|||
|
Each generator functions completely independently: they both go through
|
|||
|
values entirely on their own, only occasionally handing an acceptable value
|
|||
|
to the judge, and otherwise working through the same sequence of values as
|
|||
|
before until they find one.
|
|||
|
|
|||
|
The judge still waits for each generator to provide it with a value before
|
|||
|
comparing them (using the same comparison method as before). It keeps track
|
|||
|
of the order it receives values; the first values from each generator are
|
|||
|
compared, then the second values from each generator, then the third values,
|
|||
|
and so on.
|
|||
|
|
|||
|
Using the example starting values given above, the generators now produce
|
|||
|
the following first five values each:
|
|||
|
|
|||
|
--Gen. A-- --Gen. B--
|
|||
|
1352636452 1233683848
|
|||
|
1992081072 862516352
|
|||
|
530830436 1159784568
|
|||
|
1980017072 1616057672
|
|||
|
740335192 412269392
|
|||
|
|
|||
|
These values have the following corresponding binary values:
|
|||
|
|
|||
|
01010000100111111001100000100100
|
|||
|
01001001100010001000010110001000
|
|||
|
|
|||
|
01110110101111001011111010110000
|
|||
|
00110011011010001111010010000000
|
|||
|
|
|||
|
00011111101000111101010001100100
|
|||
|
01000101001000001110100001111000
|
|||
|
|
|||
|
01110110000001001010100110110000
|
|||
|
01100000010100110001010101001000
|
|||
|
|
|||
|
00101100001000001001111001011000
|
|||
|
00011000100100101011101101010000
|
|||
|
|
|||
|
Unfortunately, even though this change makes more bits similar on average,
|
|||
|
none of these values' lowest 16 bits match. Now, it's not until the 1056th
|
|||
|
pair that the judge finds the first match:
|
|||
|
|
|||
|
--Gen. A-- --Gen. B--
|
|||
|
1023762912 896885216
|
|||
|
|
|||
|
00111101000001010110000111100000
|
|||
|
00110101011101010110000111100000
|
|||
|
|
|||
|
This change makes the generators much slower, and the judge is getting
|
|||
|
impatient; it is now only willing to consider 5 million pairs. (Using the
|
|||
|
values from the example above, after five million pairs, the judge would
|
|||
|
eventually find a total of 309 pairs that match in their lowest 16 bits.)
|
|||
|
|
|||
|
After 5 million pairs, but using this new generator logic, what is the
|
|||
|
judge's final count?
|
|||
|
|
|||
|
Your puzzle answer was 306.
|
|||
|
|
|||
|
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
|
|||
|
. http://adventofcode.com/2017
|
|||
|
. http://adventofcode.com/2017/day/15/input
|