advent-of-code

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

commit e5ae8a74f342107890cc21839ad08691e602f00e
parent 3751975ff7fc1f864c9c6799f920fbb4ba31d748
Author: mpizzzle <michael.770211@gmail.com>
Date:   Sat,  9 Dec 2017 17:50:18 +0000

puzzle 7 complete

Diffstat:
Mpuzzle7.py | 56++++++++++++++++++++++++++++++++++++++++++++++++++++++--
1 file changed, 54 insertions(+), 2 deletions(-)

diff --git a/puzzle7.py b/puzzle7.py @@ -1,4 +1,57 @@ +from sets import Set + +class Node: + def __init__(self, name, weight, children): + self.name = name + self.weight = weight + self.children = children + with open('files/puzzle7.txt') as f: programs = f.readlines() -print programs- \ No newline at end of file +my_dict = {} + +for program in programs: + tokens = program.split(" ") + node = Node(None, None, None) + + if len(tokens) > 2: + children = [tokens[i + 3][:len(tokens[i + 3]) - 1] for i in range(len(tokens) - 3)] + node = Node(tokens[0], int(tokens[1][1 : len(tokens[1]) - 1]), children) + else: + node = Node(tokens[0], int(tokens[1][1 : len(tokens[1]) - 2]), None) + + my_dict[node.name] = node + +for node in my_dict.values(): + if node.children != None: + for i in range(len(node.children)): + node.children[i] = my_dict[node.children[i]] + +candidate = "" +highest_node_count = 0 + +def traverse(node): + return 1 if node.children == None else 1 + sum([traverse(node.children[i]) for i in range(len(node.children))]) + +for node in my_dict.values(): + node_count = traverse(node) + if node_count > highest_node_count: + highest_node_count = node_count + candidate = node.name + +print candidate + +def traverse_totals(node): + if node.children == None: + return node.weight + else: + weights = [traverse_totals(node.children[i]) for i in range(len(node.children))] + if len(Set(weights)) != 1: + for idx, weight in enumerate(weights): + if weights.count(weight) == 1: + s = list(Set(weights)) + print node.children[idx].weight + s[0] - s[1] + return node.weight + sum(weights) + +traverse_totals(my_dict[candidate])