Sean McLemon | Advent of Code

Home | Czech | Blog | GitHub | Advent Of Code | Notes


2017-12-09 - Stream Processing

(original .ipynb)
def preprocess(raw_input_str):
    input_str = ""
    cancel_next = False
    inside_garbage = False
    garbage_count = 0
    
    for c in raw_input_str:
        if cancel_next:
            cancel_next = False
            continue

        if c == "!":
            cancel_next = True
        else:
            if c == "<":
                if inside_garbage:
                    garbage_count += 1
                inside_garbage = True
            elif c == ">":
                inside_garbage = False
            elif not inside_garbage:
                input_str += c
            else:
                garbage_count += 1
    
    print(f"removed {garbage_count} of garbage")
    return [ s for s in input_str ]


def parse(tokens):
    group = []
    while len(tokens) > 0:
        token = tokens.pop(0)
        if token == "{":           
            group.append(parse(tokens))
        elif token == "}":
            break
        elif token == ",":
            group.append(token)

    return group

def all_scores(group, score=1):
    return score + sum([all_scores(g, 1 + score) for g in group if isinstance(g, list)])

def solve_part_one(input_str):
    tokens = preprocess(input_str)
    groups = parse(tokens)[0]
    total = all_scores(groups)
    return total

from pprint import pprint

assert 1 == solve_part_one("{}")
assert 6 == solve_part_one("{{{}}}")
assert 5 == solve_part_one("{{},{}}")
assert 16 == solve_part_one("{{{},{},{{}}}}")
assert 1 == solve_part_one("{,,,}")
assert 9 == solve_part_one("{{},{},{},{}}")
assert 9 == solve_part_one("{{},{},{},{}}")
assert 3 == solve_part_one("{{},{},{},{}}")
removed 0 of garbage
removed 0 of garbage
removed 0 of garbage
removed 0 of garbage
removed 4 of garbage
removed 8 of garbage
removed 0 of garbage
removed 17 of garbage
puzzle_input = open("puzzle_input/day9.txt").read()
solve_part_one(puzzle_input)
removed 6425 of garbage
12803
# preprocess("<>") #0 characters.
# preprocess("") #17 characters.
# preprocess("<<<<>") #3 characters.
# preprocess("<{!>}>") #2 characters.
# preprocess("") #0 
# preprocess(">")
# preprocess("<{o\"i!a,<{i")