129 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			129 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| Advent of Code
 | ||
| 
 | ||
| --- Day 7: Recursive Circus ---
 | ||
| 
 | ||
|    Wandering further through the circuits of the computer, you come upon a tower
 | ||
|    of programs that have gotten themselves into a bit of trouble. A recursive
 | ||
|    algorithm has gotten out of hand, and now they're balanced precariously in a
 | ||
|    large tower.
 | ||
| 
 | ||
|    One program at the bottom supports the entire tower. It's holding a large
 | ||
|    disc, and on the disc are balanced several more sub-towers. At the bottom of
 | ||
|    these sub-towers, standing on the bottom disc, are other programs, each
 | ||
|    holding their own disc, and so on. At the very tops of these
 | ||
|    sub-sub-sub-...-towers, many programs stand simply keeping the disc below
 | ||
|    them balanced but with no disc of their own.
 | ||
| 
 | ||
|    You offer to help, but first you need to understand the structure of these
 | ||
|    towers. You ask each program to yell out their name, their weight, and (if
 | ||
|    they're holding a disc) the names of the programs immediately above them
 | ||
|    balancing on that disc. You write this information down (your puzzle input).
 | ||
|    Unfortunately, in their panic, they don't do this in an orderly fashion; by
 | ||
|    the time you're done, you're not sure which program gave which information.
 | ||
| 
 | ||
|    For example, if your list is the following:
 | ||
| 
 | ||
|  pbga (66)
 | ||
|  xhth (57)
 | ||
|  ebii (61)
 | ||
|  havc (66)
 | ||
|  ktlj (57)
 | ||
|  fwft (72) -> ktlj, cntj, xhth
 | ||
|  qoyq (66)
 | ||
|  padx (45) -> pbga, havc, qoyq
 | ||
|  tknk (41) -> ugml, padx, fwft
 | ||
|  jptl (61)
 | ||
|  ugml (68) -> gyxo, ebii, jptl
 | ||
|  gyxo (61)
 | ||
|  cntj (57)
 | ||
| 
 | ||
|    ...then you would be able to recreate the structure of the towers that looks
 | ||
|    like this:
 | ||
| 
 | ||
|                  gyxo
 | ||
|                /
 | ||
|           ugml - ebii
 | ||
|         /      \
 | ||
|        |         jptl
 | ||
|        |
 | ||
|        |         pbga
 | ||
|       /        /
 | ||
|  tknk --- padx - havc
 | ||
|       \        \
 | ||
|        |         qoyq
 | ||
|        |
 | ||
|        |         ktlj
 | ||
|         \      /
 | ||
|           fwft - cntj
 | ||
|                \
 | ||
|                  xhth
 | ||
| 
 | ||
|    In this example, tknk is at the bottom of the tower (the bottom program), and
 | ||
|    is holding up ugml, padx, and fwft. Those programs are, in turn, holding up
 | ||
|    other programs; in this example, none of those programs are holding up any
 | ||
|    other programs, and are all the tops of their own towers. (The actual tower
 | ||
|    balancing in front of you is much larger.)
 | ||
| 
 | ||
|    Before you're ready to help them, you need to make sure your information is
 | ||
|    correct. What is the name of the bottom program?
 | ||
| 
 | ||
|    Your puzzle answer was gynfwly.
 | ||
| 
 | ||
| --- Part Two ---
 | ||
| 
 | ||
|    The programs explain the situation: they can't get down. Rather, they could
 | ||
|    get down, if they weren't expending all of their energy trying to keep the
 | ||
|    tower balanced. Apparently, one program has the wrong weight, and until it's
 | ||
|    fixed, they're stuck here.
 | ||
| 
 | ||
|    For any program holding a disc, each program standing on that disc forms a
 | ||
|    sub-tower. Each of those sub-towers are supposed to be the same weight, or
 | ||
|    the disc itself isn't balanced. The weight of a tower is the sum of the
 | ||
|    weights of the programs in that tower.
 | ||
| 
 | ||
|    In the example above, this means that for ugml's disc to be balanced, gyxo,
 | ||
|    ebii, and jptl must all have the same weight, and they do: 61.
 | ||
| 
 | ||
|    However, for tknk to be balanced, each of the programs standing on its disc
 | ||
|    and all programs above it must each match. This means that the following sums
 | ||
|    must all be the same:
 | ||
| 
 | ||
|      * ugml + (gyxo + ebii + jptl) = 68 + (61 + 61 + 61) = 251
 | ||
|      * padx + (pbga + havc + qoyq) = 45 + (66 + 66 + 66) = 243
 | ||
|      * fwft + (ktlj + cntj + xhth) = 72 + (57 + 57 + 57) = 243
 | ||
| 
 | ||
|    As you can see, tknk's disc is unbalanced: ugml's stack is heavier than the
 | ||
|    other two. Even though the nodes above ugml are balanced, ugml itself is too
 | ||
|    heavy: it needs to be 8 units lighter for its stack to weigh 243 and keep the
 | ||
|    towers balanced. If this change were made, its weight would be 60.
 | ||
| 
 | ||
|    Given that exactly one program is the wrong weight, what would its weight
 | ||
|    need to be to balance the entire tower?
 | ||
| 
 | ||
|    Your puzzle answer was 1526.
 | ||
| 
 | ||
|    Both parts of this puzzle are complete! They provide two gold stars: **
 | ||
| 
 | ||
|    At this point, you should return to your advent calendar and try another
 | ||
|    puzzle.
 | ||
| 
 | ||
|    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/7/input
 |