330 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			330 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| Advent of Code
 | ||
| 
 | ||
| --- Day 15: Beverage Bandits ---
 | ||
| 
 | ||
|    Having perfected their hot chocolate, the Elves have a new problem: the
 | ||
|    Goblins that live in these caves will do anything to steal it. Looks like
 | ||
|    they're here for a fight.
 | ||
| 
 | ||
|    You scan the area, generating a map of the walls (#), open cavern (.), and
 | ||
|    starting position of every Goblin (G) and Elf (E) (your puzzle input).
 | ||
| 
 | ||
|    Combat proceeds in rounds; in each round, each unit that is still alive
 | ||
|    takes a turn, resolving all of its actions before the next unit's turn
 | ||
|    begins. On each unit's turn, it tries to move into range of an enemy (if it
 | ||
|    isn't already) and then attack (if it is in range).
 | ||
| 
 | ||
|    All units are very disciplined and always follow very strict combat rules.
 | ||
|    Units never move or attack diagonally, as doing so would be dishonorable.
 | ||
|    When multiple choices are equally valid, ties are broken in reading order:
 | ||
|    top-to-bottom, then left-to-right. For instance, the order in which units
 | ||
|    take their turns within a round is the reading order of their starting
 | ||
|    positions in that round, regardless of the type of unit or whether other
 | ||
|    units have moved after the round started. For example:
 | ||
| 
 | ||
|                   would take their These units:   turns in this order: #######
 | ||
|                   ####### #.G.E.#           #.1.2.# #E.G.E#           #3.4.5#
 | ||
|                   #.G.E.#           #.6.7.# #######           #######
 | ||
| 
 | ||
|    Each unit begins its turn by identifying all possible targets (enemy units).
 | ||
|    If no targets remain, combat ends.
 | ||
| 
 | ||
|    Then, the unit identifies all of the open squares (.) that are in range of
 | ||
|    each target; these are the squares which are adjacent (immediately up, down,
 | ||
|    left, or right) to any target and which aren't already occupied by a wall or
 | ||
|    another unit. Alternatively, the unit might already be in range of a target.
 | ||
|    If the unit is not already in range of a target, and there are no open
 | ||
|    squares which are in range of a target, the unit ends its turn.
 | ||
| 
 | ||
|    If the unit is already in range of a target, it does not move, but continues
 | ||
|    its turn with an attack. Otherwise, since it is not in range of a target, it
 | ||
|    moves.
 | ||
| 
 | ||
|    To move, the unit first considers the squares that are in range and
 | ||
|    determines which of those squares it could reach in the fewest steps. A step
 | ||
|    is a single movement to any adjacent (immediately up, down, left, or right)
 | ||
|    open (.) square. Units cannot move into walls or other units. The unit does
 | ||
|    this while considering the current positions of units and does not do any
 | ||
|    prediction about where units will be later. If the unit cannot reach (find
 | ||
|    an open path to) any of the squares that are in range, it ends its turn. If
 | ||
|    multiple squares are in range and tied for being reachable in the fewest
 | ||
|    steps, the square which is first in reading order is chosen. For example:
 | ||
| 
 | ||
|  Targets:      In range:     Reachable:    Nearest:      Chosen: #######
 | ||
|  #######       #######       #######       ####### #E..G.#       #E.?G?#
 | ||
|  #E.@G.#       #E.!G.#       #E.+G.# #...#.#  -->  #.?.#?#  -->  #.@.#.#  -->
 | ||
|  #.!.#.#  -->  #...#.# #.G.#G#       #?G?#G#       #@G@#G#       #!G.#G#
 | ||
|  #.G.#G# #######       #######       #######       #######       #######
 | ||
| 
 | ||
|    In the above scenario, the Elf has three targets (the three Goblins):
 | ||
| 
 | ||
|      • Each of the Goblins has open, adjacent squares which are in range
 | ||
|      (marked with a ? on the map). • Of those squares, four are reachable
 | ||
|      (marked @); the other two (on the right) would require moving through a
 | ||
|      wall or unit to reach. • Three of these reachable squares are nearest,
 | ||
|      requiring the fewest steps (only 2) to reach (marked !). • Of those, the
 | ||
|      square which is first in reading order is chosen (+).
 | ||
| 
 | ||
|    The unit then takes a single step toward the chosen square along the
 | ||
|    shortest path to that square. If multiple steps would put the unit equally
 | ||
|    closer to its destination, the unit chooses the step which is first in
 | ||
|    reading order. (This requires knowing when there is more than one shortest
 | ||
|    path so that you can consider the first step of each such path.) For
 | ||
|    example:
 | ||
| 
 | ||
|  In range:     Nearest:      Chosen:       Distance:     Step: #######
 | ||
|  #######       #######       #######       ####### #.E...#       #.E...#
 | ||
|  #.E...#       #4E212#       #..E..# #...?.#  -->  #...!.#  -->  #...+.#  -->
 | ||
|  #32101#  -->  #.....# #..?G?#       #..!G.#       #...G.#       #432G2#
 | ||
|  #...G.# #######       #######       #######       #######       #######
 | ||
| 
 | ||
|    The Elf sees three squares in range of a target (?), two of which are
 | ||
|    nearest (!), and so the first in reading order is chosen (+). Under
 | ||
|    "Distance", each open square is marked with its distance from the
 | ||
|    destination square; the two squares to which the Elf could move on this turn
 | ||
|    (down and to the right) are both equally good moves and would leave the Elf
 | ||
|    2 steps from being in range of the Goblin. Because the step which is first
 | ||
|    in reading order is chosen, the Elf moves right one square.
 | ||
| 
 | ||
|    Here's a larger example of movement:
 | ||
| 
 | ||
|  Initially: ######### #G..G..G# #.......# #.......# #G..E..G# #.......#
 | ||
|  #.......# #G..G..G# #########
 | ||
| 
 | ||
|  After 1 round: ######### #.G...G.# #...G...# #...E..G# #.G.....# #.......#
 | ||
|  #G..G..G# #.......# #########
 | ||
| 
 | ||
|  After 2 rounds: ######### #..G.G..# #...G...# #.G.E.G.# #.......# #G..G..G#
 | ||
|  #.......# #.......# #########
 | ||
| 
 | ||
|  After 3 rounds: ######### #.......# #..GGG..# #..GEG..# #G..G...# #......G#
 | ||
|  #.......# #.......# #########
 | ||
| 
 | ||
|    Once the Goblins and Elf reach the positions above, they all are either in
 | ||
|    range of a target or cannot find any square in range of a target, and so
 | ||
|    none of the units can move until a unit dies.
 | ||
| 
 | ||
|    After moving (or if the unit began its turn in range of a target), the unit
 | ||
|    attacks.
 | ||
| 
 | ||
|    To attack, the unit first determines all of the targets that are in range of
 | ||
|    it by being immediately adjacent to it. If there are no such targets, the
 | ||
|    unit ends its turn. Otherwise, the adjacent target with the fewest hit
 | ||
|    points is selected; in a tie, the adjacent target with the fewest hit points
 | ||
|    which is first in reading order is selected.
 | ||
| 
 | ||
|    The unit deals damage equal to its attack power to the selected target,
 | ||
|    reducing its hit points by that amount. If this reduces its hit points to 0
 | ||
|    or fewer, the selected target dies: its square becomes . and it takes no
 | ||
|    further turns.
 | ||
| 
 | ||
|    Each unit, either Goblin or Elf, has 3 attack power and starts with 200 hit
 | ||
|    points.
 | ||
| 
 | ||
|    For example, suppose the only Elf is about to attack:
 | ||
| 
 | ||
|         HP:            HP: G....  9       G....  9 ..G..  4       ..G..  4
 | ||
|         ..EG.  2  -->  ..E.. ..G..  2       ..G..  2 ...G.  1       ...G.  1
 | ||
| 
 | ||
|    The "HP" column shows the hit points of the Goblin to the left in the
 | ||
|    corresponding row. The Elf is in range of three targets: the Goblin above it
 | ||
|    (with 4 hit points), the Goblin to its right (with 2 hit points), and the
 | ||
|    Goblin below it (also with 2 hit points). Because three targets are in
 | ||
|    range, the ones with the lowest hit points are selected: the two Goblins
 | ||
|    with 2 hit points each (one to the right of the Elf and one below the Elf).
 | ||
|    Of those, the Goblin first in reading order (the one to the right of the
 | ||
|    Elf) is selected. The selected Goblin's hit points (2) are reduced by the
 | ||
|    Elf's attack power (3), reducing its hit points to -1, killing it.
 | ||
| 
 | ||
|    After attacking, the unit's turn ends. Regardless of how the unit's turn
 | ||
|    ends, the next unit in the round takes its turn. If all units have taken
 | ||
|    turns in this round, the round ends, and a new round begins.
 | ||
| 
 | ||
|    The Elves look quite outnumbered. You need to determine the outcome of the
 | ||
|    battle: the number of full rounds that were completed (not counting the
 | ||
|    round in which combat ends) multiplied by the sum of the hit points of all
 | ||
|    remaining units at the moment combat ends. (Combat only ends when a unit
 | ||
|    finds no targets during its turn.)
 | ||
| 
 | ||
|    Below is an entire sample combat. Next to each map, each row's units' hit
 | ||
|    points are listed from left to right.
 | ||
| 
 | ||
|  Initially: ####### #.G...#   G(200) #...EG#   E(200), G(200) #.#.#G#   G(200)
 | ||
|  #..G#E#   G(200), E(200) #.....# #######
 | ||
| 
 | ||
|  After 1 round: ####### #..G..#   G(200) #...EG#   E(197), G(197) #.#G#G#
 | ||
|  G(200), G(197) #...#E#   E(197) #.....# #######
 | ||
| 
 | ||
|  After 2 rounds: ####### #...G.#   G(200) #..GEG#   G(200), E(188), G(194)
 | ||
|  #.#.#G#   G(194) #...#E#   E(194) #.....# #######
 | ||
| 
 | ||
|  Combat ensues; eventually, the top Elf dies:
 | ||
| 
 | ||
|  After 23 rounds: ####### #...G.#   G(200) #..G.G#   G(200), G(131) #.#.#G#
 | ||
|  G(131) #...#E#   E(131) #.....# #######
 | ||
| 
 | ||
|  After 24 rounds: ####### #..G..#   G(200) #...G.#   G(131) #.#G#G#   G(200),
 | ||
|  G(128) #...#E#   E(128) #.....# #######
 | ||
| 
 | ||
|  After 25 rounds: ####### #.G...#   G(200) #..G..#   G(131) #.#.#G#   G(125)
 | ||
|  #..G#E#   G(200), E(125) #.....# #######
 | ||
| 
 | ||
|  After 26 rounds: ####### #G....#   G(200) #.G...#   G(131) #.#.#G#   G(122)
 | ||
|  #...#E#   E(122) #..G..#   G(200) #######
 | ||
| 
 | ||
|  After 27 rounds: ####### #G....#   G(200) #.G...#   G(131) #.#.#G#   G(119)
 | ||
|  #...#E#   E(119) #...G.#   G(200) #######
 | ||
| 
 | ||
|  After 28 rounds: ####### #G....#   G(200) #.G...#   G(131) #.#.#G#   G(116)
 | ||
|  #...#E#   E(113) #....G#   G(200) #######
 | ||
| 
 | ||
|  More combat ensues; eventually, the bottom Elf dies:
 | ||
| 
 | ||
|  After 47 rounds: ####### #G....#   G(200) #.G...#   G(131) #.#.#G#   G(59)
 | ||
|  #...#.# #....G#   G(200) #######
 | ||
| 
 | ||
|    Before the 48th round can finish, the top-left Goblin finds that there are
 | ||
|    no targets remaining, and so combat ends. So, the number of full rounds that
 | ||
|    were completed is 47, and the sum of the hit points of all remaining units
 | ||
|    is 200+131+59+200 = 590. From these, the outcome of the battle is 47 * 590 =
 | ||
|    27730.
 | ||
| 
 | ||
|    Here are a few example summarized combats:
 | ||
| 
 | ||
|  #######       ####### #G..#E#       #...#E#   E(200) #E#E.E#       #E#...#
 | ||
|  E(197) #G.##.#  -->  #.E##.#   E(185) #...#E#       #E..#E#   E(200), E(200)
 | ||
|  #...E.#       #.....# #######       #######
 | ||
| 
 | ||
|  Combat ends after 37 full rounds Elves win with 982 total hit points left
 | ||
|  Outcome: 37 * 982 = 36334
 | ||
| 
 | ||
|  #######       ####### #E..EG#       #.E.E.#   E(164), E(197) #.#G.E#
 | ||
|  #.#E..#   E(200) #E.##E#  -->  #E.##.#   E(98) #G..#.#       #.E.#.#   E(200)
 | ||
|  #..E#.#       #...#.# #######       #######
 | ||
| 
 | ||
|  Combat ends after 46 full rounds Elves win with 859 total hit points left
 | ||
|  Outcome: 46 * 859 = 39514
 | ||
| 
 | ||
|  #######       ####### #E.G#.#       #G.G#.#   G(200), G(98) #.#G..#
 | ||
|  #.#G..#   G(200) #G.#.G#  -->  #..#..# #G..#.#       #...#G#   G(95) #...E.#
 | ||
|  #...G.#   G(200) #######       #######
 | ||
| 
 | ||
|  Combat ends after 35 full rounds Goblins win with 793 total hit points left
 | ||
|  Outcome: 35 * 793 = 27755
 | ||
| 
 | ||
|  #######       ####### #.E...#       #.....# #.#..G#       #.#G..#   G(200)
 | ||
|  #.###.#  -->  #.###.# #E#G#G#       #.#.#.# #...#G#       #G.G#G#   G(98),
 | ||
|  G(38), G(200) #######       #######
 | ||
| 
 | ||
|  Combat ends after 54 full rounds Goblins win with 536 total hit points left
 | ||
|  Outcome: 54 * 536 = 28944
 | ||
| 
 | ||
|  #########       ######### #G......#       #.G.....#   G(137) #.E.#...#
 | ||
|  #G.G#...#   G(200), G(200) #..##..G#       #.G##...#   G(200) #...##..#  -->
 | ||
|  #...##..# #...#...#       #.G.#...#   G(200) #.G...G.#       #.......#
 | ||
|  #.....G.#       #.......# #########       #########
 | ||
| 
 | ||
|  Combat ends after 20 full rounds Goblins win with 937 total hit points left
 | ||
|  Outcome: 20 * 937 = 18740
 | ||
| 
 | ||
|    What is the outcome of the combat described in your puzzle input?
 | ||
| 
 | ||
|    Your puzzle answer was 225096.
 | ||
| 
 | ||
| --- Part Two ---
 | ||
| 
 | ||
|    According to your calculations, the Elves are going to lose badly. Surely,
 | ||
|    you won't mess up the timeline too much if you give them just a little
 | ||
|    advanced technology, right?
 | ||
| 
 | ||
|    You need to make sure the Elves not only win, but also suffer no losses:
 | ||
|    even the death of a single Elf is unacceptable.
 | ||
| 
 | ||
|    However, you can't go too far: larger changes will be more likely to
 | ||
|    permanently alter spacetime.
 | ||
| 
 | ||
|    So, you need to find the outcome of the battle in which the Elves have the
 | ||
|    lowest integer attack power (at least 4) that allows them to win without a
 | ||
|    single death. The Goblins always have an attack power of 3.
 | ||
| 
 | ||
|    In the first summarized example above, the lowest attack power the Elves
 | ||
|    need to win without losses is 15:
 | ||
| 
 | ||
|  #######       ####### #.G...#       #..E..#   E(158) #...EG#       #...E.#
 | ||
|  E(14) #.#.#G#  -->  #.#.#.# #..G#E#       #...#.# #.....#       #.....#
 | ||
|  #######       #######
 | ||
| 
 | ||
|  Combat ends after 29 full rounds Elves win with 172 total hit points left
 | ||
|  Outcome: 29 * 172 = 4988
 | ||
| 
 | ||
|    In the second example above, the Elves need only 4 attack power:
 | ||
| 
 | ||
|  #######       ####### #E..EG#       #.E.E.#   E(200), E(23) #.#G.E#
 | ||
|  #.#E..#   E(200) #E.##E#  -->  #E.##E#   E(125), E(200) #G..#.#       #.E.#.#
 | ||
|  E(200) #..E#.#       #...#.# #######       #######
 | ||
| 
 | ||
|  Combat ends after 33 full rounds Elves win with 948 total hit points left
 | ||
|  Outcome: 33 * 948 = 31284
 | ||
| 
 | ||
|    In the third example above, the Elves need 15 attack power:
 | ||
| 
 | ||
|  #######       ####### #E.G#.#       #.E.#.#   E(8) #.#G..#       #.#E..#
 | ||
|  E(86) #G.#.G#  -->  #..#..# #G..#.#       #...#.# #...E.#       #.....#
 | ||
|  #######       #######
 | ||
| 
 | ||
|  Combat ends after 37 full rounds Elves win with 94 total hit points left
 | ||
|  Outcome: 37 * 94 = 3478
 | ||
| 
 | ||
|    In the fourth example above, the Elves need 12 attack power:
 | ||
| 
 | ||
|  #######       ####### #.E...#       #...E.#   E(14) #.#..G#       #.#..E#
 | ||
|  E(152) #.###.#  -->  #.###.# #E#G#G#       #.#.#.# #...#G#       #...#.#
 | ||
|  #######       #######
 | ||
| 
 | ||
|  Combat ends after 39 full rounds Elves win with 166 total hit points left
 | ||
|  Outcome: 39 * 166 = 6474
 | ||
| 
 | ||
|    In the last example above, the lone Elf needs 34 attack power:
 | ||
| 
 | ||
|  #########       ######### #G......#       #.......# #.E.#...#       #.E.#...#
 | ||
|  E(38) #..##..G#       #..##...# #...##..#  -->  #...##..# #...#...#
 | ||
|  #...#...# #.G...G.#       #.......# #.....G.#       #.......# #########
 | ||
|  #########
 | ||
| 
 | ||
|  Combat ends after 30 full rounds Elves win with 38 total hit points left
 | ||
|  Outcome: 30 * 38 = 1140
 | ||
| 
 | ||
|    After increasing the Elves' attack power until it is just barely enough for
 | ||
|    them to win without any Elves dying, what is the outcome of the combat
 | ||
|    described in your puzzle input?
 | ||
| 
 | ||
|    Your puzzle answer was 35354.
 | ||
| 
 | ||
|    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
 | ||
|    . 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://en.wikipedia.org/wiki/Goblin
 | ||
|    . https://adventofcode.com/2018
 | ||
|    . https://adventofcode.com/2018/day/15/input
 |