diff --git a/py/2018/08/solve.py b/py/2018/08/solve.py deleted file mode 100644 index b8513a3..0000000 --- a/py/2018/08/solve.py +++ /dev/null @@ -1,53 +0,0 @@ -import sys - -# PART 1 - -def load_stream(filename): - with open(filename) as f: - # Too lazy to do this properly - return list(reversed(list(map(int, f.read()[:-1].split(" "))))) - -def parse_node(stream): - amt_nodes = stream.pop() - amt_meta = stream.pop() - - nodes = [] - for _ in range(amt_nodes): - nodes.append(parse_node(stream)) - - meta = [] - for _ in range(amt_meta): - meta.append(stream.pop()) - - return (nodes, meta) - -def sum_of_meta(node): - nodes, meta = node - return sum(meta) + sum(map(sum_of_meta, nodes)) - -# PART 2 - -def value_of(node): - nodes, meta = node - if nodes: - total = 0 - for i in meta: - i -= 1 - if i >= 0 and i < len(nodes): - total += value_of(nodes[i]) - return total - else: - return sum(meta) - -def main(filename): - print(f"Solutions for {filename}") - stream = load_stream(filename) - node = parse_node(stream) - meta = sum_of_meta(node) - print(f"Part 1: {meta}") - value = value_of(node) - print(f"Part 2: {value}") - -if __name__ == "__main__": - for filename in sys.argv[1:]: - main(filename) diff --git a/py/2018/08/test_input.txt b/py/2018/08/test_input.txt deleted file mode 100644 index 4279f52..0000000 --- a/py/2018/08/test_input.txt +++ /dev/null @@ -1 +0,0 @@ -2 3 0 3 10 11 12 1 1 0 1 99 2 1 1 2 diff --git a/py/aoc/__init__.py b/py/aoc/__init__.py index 44c395f..ff62c4a 100644 --- a/py/aoc/__init__.py +++ b/py/aoc/__init__.py @@ -2,7 +2,7 @@ import sys import argparse from pathlib import Path -from .y2018 import d01, d02, d03, d04, d05, d06, d07 +from .y2018 import d01, d02, d03, d04, d05, d06, d07, d08 from .y2020 import d10 from .y2021 import d14 from .y2022 import d01, d02, d03, d04, d05, d06 @@ -15,6 +15,7 @@ DAYS = { "2018_05": y2018.d05.solve, "2018_06": y2018.d06.solve, "2018_07": y2018.d07.solve, + "2018_08": y2018.d08.solve, "2020_10": y2020.d10.solve, "2021_14": y2021.d14.solve, "2022_01": y2022.d01.solve, diff --git a/py/aoc/y2018/d08.py b/py/aoc/y2018/d08.py new file mode 100644 index 0000000..74577f7 --- /dev/null +++ b/py/aoc/y2018/d08.py @@ -0,0 +1,51 @@ +# PART 1 + + +def load_stream(inputstr): + # Too lazy to do this properly + return list(reversed(list(map(int, inputstr[:-1].split(" "))))) + + +def parse_node(stream): + amt_nodes = stream.pop() + amt_meta = stream.pop() + + nodes = [] + for _ in range(amt_nodes): + nodes.append(parse_node(stream)) + + meta = [] + for _ in range(amt_meta): + meta.append(stream.pop()) + + return (nodes, meta) + + +def sum_of_meta(node): + nodes, meta = node + return sum(meta) + sum(map(sum_of_meta, nodes)) + + +# PART 2 + + +def value_of(node): + nodes, meta = node + if nodes: + total = 0 + for i in meta: + i -= 1 + if i >= 0 and i < len(nodes): + total += value_of(nodes[i]) + return total + else: + return sum(meta) + + +def solve(inputstr): + stream = load_stream(inputstr) + node = parse_node(stream) + meta = sum_of_meta(node) + print(f"Part 1: {meta}") + value = value_of(node) + print(f"Part 2: {value}")