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
|