day09: Day 09: Stream Processing

Description Usage Arguments Details Examples

Description

Stream Processing

Usage

1
2
3
process_stream(stream)

count_garbage(stream)

Arguments

stream

a string to process

Details

Part One

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:

How many non-canceled characters are within the garbage in your puzzle input?

Examples

1
2
process_stream("{{<ab>},{<ab>},{<ab>},{<ab>}}")
count_garbage("{{<ab>},{<ab>},{<ab>},{<ab>}}")

tjmahr/adventofcode17 documentation built on May 30, 2019, 2:29 p.m.