204 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			204 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| Advent of Code
 | ||
| br0xen (AoC++) 26*
 | ||
| 
 | ||
| --- Day 13: Distress Signal ---
 | ||
| 
 | ||
|    You climb the hill and again try contacting the Elves. However, you instead receive a signal you
 | ||
|    weren't expecting: a distress signal.
 | ||
| 
 | ||
|    Your handheld device must still not be working properly; the packets from the distress signal
 | ||
|    got decoded out of order. You'll need to re-order the list of received packets (your puzzle
 | ||
|    input) to decode the message.
 | ||
| 
 | ||
|    Your list consists of pairs of packets; pairs are separated by a blank line. You need to
 | ||
|    identify how many pairs of packets are in the right order.
 | ||
| 
 | ||
|    For example:
 | ||
| 
 | ||
|  [1,1,3,1,1]
 | ||
|  [1,1,5,1,1]
 | ||
| 
 | ||
|  [[1],[2,3,4]]
 | ||
|  [[1],4]
 | ||
| 
 | ||
|  [9]
 | ||
|  [[8,7,6]]
 | ||
| 
 | ||
|  [[4,4],4,4]
 | ||
|  [[4,4],4,4,4]
 | ||
| 
 | ||
|  [7,7,7,7]
 | ||
|  [7,7,7]
 | ||
| 
 | ||
|  []
 | ||
|  [3]
 | ||
| 
 | ||
|  [[[]]]
 | ||
|  [[]]
 | ||
| 
 | ||
|  [1,[2,[3,[4,[5,6,7]]]],8,9]
 | ||
|  [1,[2,[3,[4,[5,6,0]]]],8,9]
 | ||
| 
 | ||
|    Packet data consists of lists and integers. Each list starts with [, ends with ], and contains
 | ||
|    zero or more comma-separated values (either integers or other lists). Each packet is always a
 | ||
|    list and appears on its own line.
 | ||
| 
 | ||
|    When comparing two values, the first value is called left and the second value is called right.
 | ||
|    Then:
 | ||
| 
 | ||
|      • If both values are integers, the lower integer should come first. If the left integer is
 | ||
|        lower than the right integer, the inputs are in the right order. If the left integer is
 | ||
|        higher than the right integer, the inputs are not in the right order. Otherwise, the inputs
 | ||
|        are the same integer; continue checking the next part of the input.
 | ||
|      • If both values are lists, compare the first value of each list, then the second value, and
 | ||
|        so on. If the left list runs out of items first, the inputs are in the right order. If the
 | ||
|        right list runs out of items first, the inputs are not in the right order. If the lists are
 | ||
|        the same length and no comparison makes a decision about the order, continue checking the
 | ||
|        next part of the input.
 | ||
|      • If exactly one value is an integer, convert the integer to a list which contains that
 | ||
|        integer as its only value, then retry the comparison. For example, if comparing [0,0,0] and
 | ||
|        2, convert the right value to [2] (a list containing 2); the result is then found by instead
 | ||
|        comparing [0,0,0] and [2].
 | ||
| 
 | ||
|    Using these rules, you can determine which of the pairs in the example are in the right order:
 | ||
| 
 | ||
|  == Pair 1 ==
 | ||
|  - Compare [1,1,3,1,1] vs [1,1,5,1,1]
 | ||
|    - Compare 1 vs 1
 | ||
|    - Compare 1 vs 1
 | ||
|    - Compare 3 vs 5
 | ||
|      - Left side is smaller, so inputs are in the right order
 | ||
| 
 | ||
|  == Pair 2 ==
 | ||
|  - Compare [[1],[2,3,4]] vs [[1],4]
 | ||
|    - Compare [1] vs [1]
 | ||
|      - Compare 1 vs 1
 | ||
|    - Compare [2,3,4] vs 4
 | ||
|      - Mixed types; convert right to [4] and retry comparison
 | ||
|      - Compare [2,3,4] vs [4]
 | ||
|        - Compare 2 vs 4
 | ||
|          - Left side is smaller, so inputs are in the right order
 | ||
| 
 | ||
|  == Pair 3 ==
 | ||
|  - Compare [9] vs [[8,7,6]]
 | ||
|    - Compare 9 vs [8,7,6]
 | ||
|      - Mixed types; convert left to [9] and retry comparison
 | ||
|      - Compare [9] vs [8,7,6]
 | ||
|        - Compare 9 vs 8
 | ||
|          - Right side is smaller, so inputs are not in the right order
 | ||
| 
 | ||
|  == Pair 4 ==
 | ||
|  - Compare [[4,4],4,4] vs [[4,4],4,4,4]
 | ||
|    - Compare [4,4] vs [4,4]
 | ||
|      - Compare 4 vs 4
 | ||
|      - Compare 4 vs 4
 | ||
|    - Compare 4 vs 4
 | ||
|    - Compare 4 vs 4
 | ||
|    - Left side ran out of items, so inputs are in the right order
 | ||
| 
 | ||
|  == Pair 5 ==
 | ||
|  - Compare [7,7,7,7] vs [7,7,7]
 | ||
|    - Compare 7 vs 7
 | ||
|    - Compare 7 vs 7
 | ||
|    - Compare 7 vs 7
 | ||
|    - Right side ran out of items, so inputs are not in the right order
 | ||
| 
 | ||
|  == Pair 6 ==
 | ||
|  - Compare [] vs [3]
 | ||
|    - Left side ran out of items, so inputs are in the right order
 | ||
| 
 | ||
|  == Pair 7 ==
 | ||
|  - Compare [[[]]] vs [[]]
 | ||
|    - Compare [[]] vs []
 | ||
|      - Right side ran out of items, so inputs are not in the right order
 | ||
| 
 | ||
|  == Pair 8 ==
 | ||
|  - Compare [1,[2,[3,[4,[5,6,7]]]],8,9] vs [1,[2,[3,[4,[5,6,0]]]],8,9]
 | ||
|    - Compare 1 vs 1
 | ||
|    - Compare [2,[3,[4,[5,6,7]]]] vs [2,[3,[4,[5,6,0]]]]
 | ||
|      - Compare 2 vs 2
 | ||
|      - Compare [3,[4,[5,6,7]]] vs [3,[4,[5,6,0]]]
 | ||
|        - Compare 3 vs 3
 | ||
|        - Compare [4,[5,6,7]] vs [4,[5,6,0]]
 | ||
|          - Compare 4 vs 4
 | ||
|          - Compare [5,6,7] vs [5,6,0]
 | ||
|            - Compare 5 vs 5
 | ||
|            - Compare 6 vs 6
 | ||
|            - Compare 7 vs 0
 | ||
|              - Right side is smaller, so inputs are not in the right order
 | ||
| 
 | ||
|    What are the indices of the pairs that are already in the right order? (The first pair has index
 | ||
|    1, the second pair has index 2, and so on.) In the above example, the pairs in the right order
 | ||
|    are 1, 2, 4, and 6; the sum of these indices is 13.
 | ||
| 
 | ||
|    Determine which pairs of packets are already in the right order. What is the sum of the indices
 | ||
|    of those pairs?
 | ||
| 
 | ||
|    Your puzzle answer was 5905.
 | ||
| 
 | ||
| --- Part Two ---
 | ||
| 
 | ||
|    Now, you just need to put all of the packets in the right order. Disregard the blank lines in
 | ||
|    your list of received packets.
 | ||
| 
 | ||
|    The distress signal protocol also requires that you include two additional divider packets:
 | ||
| 
 | ||
|  [[2]]
 | ||
|  [[6]]
 | ||
| 
 | ||
|    Using the same rules as before, organize all packets - the ones in your list of received packets
 | ||
|    as well as the two divider packets - into the correct order.
 | ||
| 
 | ||
|    For the example above, the result of putting the packets in the correct order is:
 | ||
| 
 | ||
|  []
 | ||
|  [[]]
 | ||
|  [[[]]]
 | ||
|  [1,1,3,1,1]
 | ||
|  [1,1,5,1,1]
 | ||
|  [[1],[2,3,4]]
 | ||
|  [1,[2,[3,[4,[5,6,0]]]],8,9]
 | ||
|  [1,[2,[3,[4,[5,6,7]]]],8,9]
 | ||
|  [[1],4]
 | ||
|  [[2]]
 | ||
|  [3]
 | ||
|  [[4,4],4,4]
 | ||
|  [[4,4],4,4,4]
 | ||
|  [[6]]
 | ||
|  [7,7,7]
 | ||
|  [7,7,7,7]
 | ||
|  [[8,7,6]]
 | ||
|  [9]
 | ||
| 
 | ||
|    Afterward, locate the divider packets. To find the decoder key for this distress signal, you
 | ||
|    need to determine the indices of the two divider packets and multiply them together. (The first
 | ||
|    packet is at index 1, the second packet is at index 2, and so on.) In this example, the divider
 | ||
|    packets are 10th and 14th, and so the decoder key is 140.
 | ||
| 
 | ||
|    Organize all of the packets into the correct order. What is the decoder key for the distress
 | ||
|    signal?
 | ||
| 
 | ||
|    Your puzzle answer was 21691.
 | ||
| 
 | ||
|    Both parts of this puzzle are complete! They provide two gold stars: **
 | ||
| 
 | ||
| References
 | ||
| 
 | ||
|    Visible links
 | ||
|    . https://adventofcode.com/
 | ||
|    . https://adventofcode.com/2022/about
 | ||
|    . https://adventofcode.com/2022/events
 | ||
|    . https://adventofcode.com/2022/settings
 | ||
|    . https://adventofcode.com/2022/auth/logout
 | ||
|    . Advent of Code Supporter
 | ||
| 	https://adventofcode.com/2022/support
 | ||
|    . https://adventofcode.com/2022
 | ||
|    . https://adventofcode.com/2022
 | ||
|    . https://adventofcode.com/2022/support
 | ||
|    . https://adventofcode.com/2022/sponsors
 | ||
|    . https://adventofcode.com/2022/leaderboard
 | ||
|    . https://adventofcode.com/2022/stats
 | ||
|    . https://adventofcode.com/2022/sponsors
 | ||
|    . https://adventofcode.com/2022
 | ||
|    . https://adventofcode.com/2022/day/13/input
 |