diff options
Diffstat (limited to 'src/19/part1')
| -rw-r--r-- | src/19/part1 | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/src/19/part1 b/src/19/part1 new file mode 100644 index 0000000..22eba35 --- /dev/null +++ b/src/19/part1 @@ -0,0 +1,79 @@ +--- Day 19: Monster Messages --- + +You land in an airport surrounded by dense forest. As you walk to your high-speed train, the Elves +at the Mythical Information Bureau contact you again. They think their satellite has collected an +image of a [1m[37msea monster[0m! Unfortunately, the connection to the satellite is having +problems, and many of the messages sent back from the satellite have been corrupted. + +They sent you a list of [1m[37mthe rules valid messages should obey[0m and a list of +[1m[37mreceived messages[0m they've collected so far (your puzzle input). + +The [1m[37mrules for valid messages[0m (the top part of your puzzle input) are numbered and build +upon each other. For example: + +0: 1 2 +1: "a" +2: 1 3 | 3 1 +3: "b" + +Some rules, like 3: "b", simply match a single character (in this case, b). + +The remaining rules list the sub-rules that must be followed; for example, the rule 0: 1 2 means +that to match rule 0, the text being checked must match rule 1, and the text after the part that +matched rule 1 must then match rule 2. + +Some of the rules have multiple lists of sub-rules separated by a pipe (|). This means that +[1m[37mat least one[0m list of sub-rules must match. (The ones that match might be different each +time the rule is encountered.) For example, the rule 2: 1 3 | 3 1 means that to match rule 2, the +text being checked must match rule 1 followed by rule 3 [1m[37mor[0m it must match rule 3 +followed by rule 1. + +Fortunately, there are no loops in the rules, so the list of possible matches will be finite. Since +rule 1 matches a and rule 3 matches b, rule 2 matches either ab or ba. Therefore, rule 0 matches aab +or aba. + +Here's a more interesting example: + +0: 4 1 5 +1: 2 3 | 3 2 +2: 4 4 | 5 5 +3: 4 5 | 5 4 +4: "a" +5: "b" + +Here, because rule 4 matches a and rule 5 matches b, rule 2 matches two letters that are the same +(aa or bb), and rule 3 matches two letters that are different (ab or ba). + +Since rule 1 matches rules 2 and 3 once each in either order, it must match two pairs of letters, +one pair with matching letters and one pair with different letters. This leaves eight possibilities: +aaab, aaba, bbab, bbba, abaa, abbb, baaa, or babb. + +Rule 0, therefore, matches a (rule 4), then any of the eight options from rule 1, then b (rule 5): +aaaabb, aaabab, abbabb, abbbab, aabaab, aabbbb, abaaab, or ababbb. + +The [1m[37mreceived messages[0m (the bottom part of your puzzle input) need to be checked against +the rules so you can determine which are valid and which are corrupted. Including the rules and the +messages together, this might look like: + +0: 4 1 5 +1: 2 3 | 3 2 +2: 4 4 | 5 5 +3: 4 5 | 5 4 +4: "a" +5: "b" + +ababbb +bababa +abbbab +aaabbb +aaaabbb + +Your goal is to determine [1m[37mthe number of messages that completely match rule 0[0m. In the +above example, ababbb and abbbab match, but bababa, aaabbb, and aaaabbb do not, producing the answer +[1m[37m2[0m. The whole message must match all of rule 0; there can't be extra unmatched +characters in the message. (For example, aaaabbb might appear to match rule 0 above, but it has an +extra unmatched b on the end.) + +[1m[37mHow many messages completely match rule 0?[0m + + |
