Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --- 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.
- <random characters>, 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<a>, 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).
- {<a>,<a>,<a>,<a>}, 1 group.
- {{<a>},{<a>},{<a>},{<a>}}, 5 groups.
- {{<!>},{<!>},{<!>},{<a>}}, 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.
- {<a>,<a>,<a>,<a>}, score of 1.
- {{<ab>},{<ab>},{<ab>},{<ab>}}, score of 1 + 2 + 2 + 2 + 2 = 9.
- {{<!!>},{<!!>},{<!!>},{<!!>}}, score of 1 + 2 + 2 + 2 + 2 = 9.
- {{<a!>},{<a!>},{<a!>},{<ab>}}, score of 1 + 2 = 3.
- What is the total score for all groups in your input?
- Your puzzle answer was 12897.
- The first half of this puzzle is complete! It provides one gold star: *
- --- 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.
- <random characters>, 17 characters.
- <<<<>, 3 characters.
- <{!>}>, 2 characters.
- <!!>, 0 characters.
- <!!!>>, 0 characters.
- <{o"i!a,<{i<a>, 10 characters.
- How many non-canceled characters are within the garbage in your puzzle input?
- InputURL: https://adventofcode.com/2017/day/9/input
- -----------------------------------------------Pakris solution:------------------------------
- tableday9 = open("TableDay9.txt", "r").readlines()
- # testgarbage1 = '<>'
- # testgarbage2 = '<random characters>'
- # testgarbage3 = '<<<<>'
- # testgarbage4 = '<{!>}>'
- # testgarbage5 = '<!!>'
- # testgarbage6 = '<!!!>>'
- # testgarbage7 = '<{o"i!a,<{i<a>'
- # testgarbages = [testgarbage1 + testgarbage2 + testgarbage3 + testgarbage4 + testgarbage5 + testgarbage6 + testgarbage7]
- # teststream1 = '{}'
- # teststream2 = '{{{}}}'
- # teststream3 = '{{},{}}'
- # teststream4 = '{{{},{},{{}}}}'
- # teststream5 = '{<{},{},{{}}>}'
- # teststream6 = '{<a>,<a>,<a>,<a>}'
- # teststream7 = '{{<a>},{<a>},{<a>},{<a>}}'
- # teststream8 = '{{<!>},{<!>},{<!>},{<a>}}'
- # teststreams = [teststream1 + teststream2 + teststream3 + teststream4 + teststream5 + teststream6 + teststream7, teststream8]
- # newtest = '''{{{{{{<o,!!!!!!!!iuo!!!>}{{{o{{a<u}>},{<!>,<,">}},{},{{{<},e<i!!!>!!!{'u,!>!!!>}>'''
- characterlist = list(str(tableday9).strip("['']"))
- idx = 0
- depth = 0
- garbage = False
- opengroup = False
- score = 0
- removedgarbage = 0
- while idx < len(characterlist):
- #print("\nIndex: ", idx, "\nCharacter: ", characterlist[idx])
- #if garbage == True:
- #print("Garbage!")
- if characterlist[idx] == "!":
- idx += 2
- #print("Skip next")
- continue
- elif characterlist[idx] == "{" and garbage == False:
- depth += 1
- idx += 1
- opengroup = True
- #print("depth: ", depth)
- continue
- elif characterlist[idx] == "}" and garbage == False and opengroup == True:
- score += depth
- depth -= 1
- idx += 1
- if depth <= 0:
- opengroup = False
- #print("depth: ", depth)
- #print("Score: ", score)
- continue
- elif characterlist[idx] == "<" and garbage == False:
- idx += 1
- garbage = True
- continue
- elif characterlist[idx] == ">" and garbage == True:
- idx += 1
- garbage = False
- continue
- elif garbage == True:
- removedgarbage += 1
- idx += 1
- #print("Total removed garbage: ", removedgarbage)
- continue
- else:
- idx += 1
- continue
- print(removedgarbage)
- pass
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement