92 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			92 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| Advent of Code
 | ||
| 
 | ||
| --- Day 6: Memory Reallocation ---
 | ||
| 
 | ||
|    A debugger program here is having an issue: it is trying to repair a memory
 | ||
|    reallocation routine, but it keeps getting stuck in an infinite loop.
 | ||
| 
 | ||
|    In this area, there are sixteen memory banks; each memory bank can hold any
 | ||
|    number of blocks. The goal of the reallocation routine is to balance the
 | ||
|    blocks between the memory banks.
 | ||
| 
 | ||
|    The reallocation routine operates in cycles. In each cycle, it finds the
 | ||
|    memory bank with the most blocks (ties won by the lowest-numbered memory
 | ||
|    bank) and redistributes those blocks among the banks. To do this, it removes
 | ||
|    all of the blocks from the selected bank, then moves to the next (by index)
 | ||
|    memory bank and inserts one of the blocks. It continues doing this until it
 | ||
|    runs out of blocks; if it reaches the last memory bank, it wraps around to
 | ||
|    the first one.
 | ||
| 
 | ||
|    The debugger would like to know how many redistributions can be done before
 | ||
|    a blocks-in-banks configuration is produced that has been seen before.
 | ||
| 
 | ||
|    For example, imagine a scenario with only four memory banks:
 | ||
| 
 | ||
|      • The banks start with 0, 2, 7, and 0 blocks. The third bank has the most
 | ||
|        blocks, so it is chosen for redistribution.
 | ||
| 
 | ||
|      • Starting with the next bank (the fourth bank) and then continuing to the
 | ||
|        first bank, the second bank, and so on, the 7 blocks are spread out over
 | ||
|        the memory banks. The fourth, first, and second banks get two blocks each,
 | ||
|        and the third bank gets one back. The final result looks like this: 2 4 1
 | ||
|        2.
 | ||
| 
 | ||
|      • Next, the second bank is chosen because it contains the most blocks
 | ||
|        (four). Because there are four memory banks, each gets one block. The
 | ||
|        result is: 3 1 2 3.
 | ||
| 
 | ||
|      • Now, there is a tie between the first and fourth memory banks, both of
 | ||
|        which have three blocks. The first bank wins the tie, and its three blocks
 | ||
|        are distributed evenly over the other three banks, leaving it with none: 0
 | ||
|        2 3 4.
 | ||
| 
 | ||
|      • The fourth bank is chosen, and its four blocks are distributed such that
 | ||
|        each of the four banks receives one: 1 3 4 1.
 | ||
| 
 | ||
|      • The third bank is chosen, and the same thing happens: 2 4 1 2.
 | ||
| 
 | ||
|    At this point, we've reached a state we've seen before: 2 4 1 2 was already
 | ||
|    seen. The infinite loop is detected after the fifth block redistribution
 | ||
|    cycle, and so the answer in this example is 5.
 | ||
| 
 | ||
|    Given the initial block counts in your puzzle input, how many redistribution
 | ||
|    cycles must be completed before a configuration is produced that has been
 | ||
|    seen before?
 | ||
| 
 | ||
|    Your puzzle answer was 12841.
 | ||
| 
 | ||
| --- Part Two ---
 | ||
| 
 | ||
|    Out of curiosity, the debugger would also like to know the size of the loop:
 | ||
|    starting from a state that has already been seen, how many block
 | ||
|    redistribution cycles must be performed before that same state is seen
 | ||
|    again?
 | ||
| 
 | ||
|    In the example above, 2 4 1 2 is seen again after four cycles, and so the
 | ||
|    answer in that example would be 4.
 | ||
| 
 | ||
|    How many cycles are in the infinite loop that arises from the configuration
 | ||
|    in your puzzle input?
 | ||
| 
 | ||
|    Your puzzle answer was 8038.
 | ||
| 
 | ||
|    Both parts of this puzzle are complete! They provide two gold stars: **
 | ||
| 
 | ||
| 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/6/input
 |