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
|