summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGustav Sörnäs <gusso230@student.liu.se>2019-12-07 20:23:21 +0100
committerGustav Sörnäs <gusso230@student.liu.se>2019-12-07 20:23:21 +0100
commit07a417614ea826ecf989359d5a69b24895b63462 (patch)
tree6a762a2057a3348f24cf9b0b0522abbd4b08cc50
parent8555fc71d0ba45760a16fafc785a7b6631336801 (diff)
downloadaoc-07a417614ea826ecf989359d5a69b24895b63462.tar.gz
Refactor day 6
-rw-r--r--solutions/py/06.py110
1 files changed, 47 insertions, 63 deletions
diff --git a/solutions/py/06.py b/solutions/py/06.py
index 660093c..2ca5f26 100644
--- a/solutions/py/06.py
+++ b/solutions/py/06.py
@@ -1,14 +1,6 @@
from typing import Iterable
import sys
-def flatten(l):
- # https://stackoverflow.com/a/40857703
- for v in l:
- if isinstance(v, Iterable):
- yield from flatten(v)
- else:
- yield v
-
class Tree(object):
# https://stackoverflow.com/a/28015122
def __init__(self, name='root', children=None):
@@ -27,65 +19,57 @@ class Tree(object):
return self.name == other.name
return False
def parents(self):
- if self.parent == None:
- return []
- return [self.parent, self.parent.parents()]
-
-
-if __name__ == "__main__":
- lines = open("../input/06", "r").readlines()
-
- trees = {}
- seen = set() # seen trees. contains only IDs
- leafs = {}
+ return [self.parent] + self.parent.parents() if self.parent != None\
+ else []
- for orbit in lines:
- orbit = orbit.rstrip().split(")")
- #print(orbit)
- if not orbit[0] in seen:
- trees[orbit[0]] = Tree(orbit[0])
- seen.add(orbit[0])
+lines = open("../input/06", "r").readlines()
- # hook up each child to its parent (since every parent now exists)
- for orbit in lines:
- orbit = orbit.rstrip().split(")")
- if orbit[1] in seen:
- trees[orbit[0]].add_child(trees[orbit[1]])
- else:
- leafs[orbit[1]] = Tree(orbit[1])
- trees[orbit[0]].add_child(leafs[orbit[1]])
- for k in trees:
- pass
- #print(trees[k], trees[k].children)
+trees = {}
+seen = set() # seen trees. contains only IDs
+leafs = {}
- trees.update(leafs)
+for orbit in lines:
+ orbit = orbit.rstrip().split(")")
+ #print(orbit)
+ if not orbit[0] in seen:
+ trees[orbit[0]] = Tree(orbit[0])
+ seen.add(orbit[0])
- sum_depths = 0
- depth = 0
- depths = {}
- def count_children(tree, depth):
- global sum_depths # fusk-rekursion? ville bara att det skulle fungera
- sum_depths += depth
- depths[tree.name] = depth
- for child in tree.children:
- count_children(child, depth+1)
- count_children(trees["COM"], 0)
- print("1:", sum_depths)
+# hook up each child to its parent (since every parent now exists)
+for orbit in lines:
+ orbit = orbit.rstrip().split(")")
+ if orbit[1] in seen:
+ trees[orbit[0]].add_child(trees[orbit[1]])
+ else:
+ leafs[orbit[1]] = Tree(orbit[1])
+ trees[orbit[0]].add_child(leafs[orbit[1]])
+for k in trees:
+ pass
+ #print(trees[k], trees[k].children)
- parents = {}
- for tree in trees:
- parents[tree] = list(flatten(trees[tree].parents()))
+trees.update(leafs)
- # find common parent and distance to it
- src = trees["YOU"].parent.name
- tar = trees["SAN"].parent.name
- src_dist = 0
- for src_parent in parents[src]:
- src_dist += 1
- tar_dist = 0
- for tar_parent in parents[tar]:
- tar_dist += 1
- if src_parent == tar_parent:
- print("2:", src_parent.name, src_dist, tar_dist, src_dist + tar_dist)
- sys.exit()
+sum_depths = 0
+depth = 0
+depths = {}
+def count_children(tree, depth):
+ global sum_depths # fusk-rekursion? ville bara att det skulle fungera
+ sum_depths += depth
+ depths[tree.name] = depth
+ for child in tree.children:
+ count_children(child, depth+1)
+count_children(trees["COM"], 0)
+print("1:", sum_depths)
+# find common parent and distance to it
+src_parents = trees["YOU"].parent.parents()
+tar_parents = trees["SAN"].parent.parents()
+src_dist = 0
+for src_parent in src_parents:
+ src_dist += 1
+ tar_dist = 0
+ for tar_parent in tar_parents:
+ tar_dist += 1
+ if src_parent == tar_parent:
+ print("2:", src_parent.name, src_dist, tar_dist, src_dist + tar_dist)
+ sys.exit()