diff --git a/2017/day09/problem b/2017/day09/problem new file mode 100644 index 0000000..bb34d46 --- /dev/null +++ b/2017/day09/problem @@ -0,0 +1,99 @@ +Advent of Code + +--- Day 9: Stream Processing --- + + A large stream blocks your path. According to the locals, it's not safe to cross the stream at the moment because it's full of garbage. You look down at the + stream; rather than water, you discover that it's a stream of characters. + + You sit for a while and record part of the stream (your puzzle input). The characters represent groups - sequences that begin with { and end with }. Within a + group, there are zero or more other things, separated by commas: either another group or garbage. Since groups can contain other groups, a } only closes the + most-recently-opened unclosed group - that is, they are nestable. Your puzzle input represents a single, large group which itself contains many smaller ones. + + Sometimes, instead of a group, you will find garbage. Garbage begins with < and ends with >. Between those angle brackets, almost any character can appear, + including { and }. Within garbage, < has no special meaning. + + In a futile attempt to clean up the garbage, some program has canceled some of the characters within it using !: inside garbage, any character that comes after + ! should be ignored, including <, >, and even another !. + + You don't see any characters that deviate from these rules. Outside garbage, you only find well-formed groups, and garbage always terminates according to the + rules above. + + Here are some self-contained pieces of garbage: + + * <>, empty garbage. + * , garbage containing random characters. + * <<<<>, because the extra < are ignored. + * <{!>}>, because the first > is canceled. + * , because the second ! is canceled, allowing the > to terminate the garbage. + * >, because the second ! and the first > are canceled. + * <{o"i!a,<{i, which ends at the first >. + + Here are some examples of whole streams and the number of groups they contain: + + * {}, 1 group. + * {{{}}}, 3 groups. + * {{},{}}, also 3 groups. + * {{{},{},{{}}}}, 6 groups. + * {<{},{},{{}}>}, 1 group (which itself contains garbage). + * {,,,}, 1 group. + * {{},{},{},{}}, 5 groups. + * {{},{},{},{}}, 2 groups (since all but the last > are canceled). + + Your goal is to find the total score for all groups in your input. Each group is assigned a score which is one more than the score of the group that immediately + contains it. (The outermost group gets a score of 1.) + + * {}, score of 1. + * {{{}}}, score of 1 + 2 + 3 = 6. + * {{},{}}, score of 1 + 2 + 2 = 5. + * {{{},{},{{}}}}, score of 1 + 2 + 3 + 3 + 3 + 4 = 16. + * {,,,}, score of 1. + * {{},{},{},{}}, score of 1 + 2 + 2 + 2 + 2 = 9. + * {{},{},{},{}}, score of 1 + 2 + 2 + 2 + 2 = 9. + * {{},{},{},{}}, score of 1 + 2 = 3. + + What is the total score for all groups in your input? + + Your puzzle answer was ______. + +--- Part Two --- + + Now, you're ready to remove the garbage. + + To prove you've removed it, you need to count all of the characters within the garbage. The leading and trailing < and > don't count, nor do any canceled + characters or the ! doing the canceling. + + * <>, 0 characters. + * , 17 characters. + * <<<<>, 3 characters. + * <{!>}>, 2 characters. + * , 0 characters. + * >, 0 characters. + * <{o"i!a,<{i, 10 characters. + + How many non-canceled characters are within the garbage in your puzzle input? + + Your puzzle answer was ______. + + 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/9/input