1
0
Fork 0

Add day 7 solutions - GHETTO

This commit is contained in:
Pedro de Oliveira 2017-12-08 01:06:18 +00:00
parent 4d1fabe573
commit e56615e7ee
4 changed files with 1243 additions and 0 deletions

97
7/7p1.py Executable file
View File

@ -0,0 +1,97 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import copy
import json
#inputs = ["example.txt", "input.txt"]
#inputs = ["example.txt"]
inputs = ["input.txt"]
#inputs = ["n4z5Mtvk"]
def countlol(oix):
total = 0
total += oix.weight
for z in oix.children:
total += countlol(z)
return total
class program(object):
def __init__(self, name, weight, children = []):
self.name = name
self.weight = int(weight.replace('(', '').replace(')', ''))
self.children = children
def toJSON(self):
return json.dumps(self, default=lambda o: o.__dict__,
sort_keys=True, indent=4)
def __repr__(self):
return str(self.__dict__)
def search(programs, name):
for idx, val in enumerate(programs):
if val.name == name:
return idx
def solve(filename):
programs = []
tree = []
# read all items first
with open(filename, "r") as fp:
for line in fp:
val = line.strip().split(" ")
programs.append(program(val[0], val[1]))
# create tree
with open(filename, "r") as fp:
for line in fp:
val = line.strip().split(" ")
if len(val) > 2:
childs = []
for idx in range(3, len(val)):
name = val[idx].replace(',', '')
pidx = search(programs, name)
childs.append(copy.deepcopy(programs[pidx]))
del programs[pidx]
tree.append(program(val[0], val[1], childs))
indexes = {}
delete = []
#print(tree)
for idx, val in enumerate(tree):
indexes[val.name] = idx
for idx, val in enumerate(tree):
for cidx, child in enumerate(val.children):
if child.name in indexes:
tree[idx].children[cidx] = copy.deepcopy(tree[indexes[child.name]])
delete.append(indexes[child.name])
#del indexes[child.name]
#print(len(tree))
delete.sort(reverse=True)
for idx in delete:
del tree[idx]
#print(tree[0].toJSON())
#print(len(tree))
for c in tree[0].children:
for c2 in c.children:
print(c2.name, countlol(c2))
print()
return programs
for puzzle in inputs:
print(puzzle, solve(puzzle))

55
7/7p2.py Executable file
View File

@ -0,0 +1,55 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import copy
import json
#inputs = ["example.txt", "input.txt"]
#inputs = ["example.txt"]
inputs = ["input.txt"]
#inputs = ["n4z5Mtvk"]
class program(object):
def __init__(self, name, weight, children = []):
self.name = name
self.weight = weight
self.children = children
def toJSON(self):
return json.dumps(self, default=lambda o: o.__dict__,
sort_keys=True, indent=4)
def __repr__(self):
return self.toJSON()
def total(self):
result = self.weight
for child in self.children:
result += self.total(child)
return total
def countlol(oix):
total = 0
total += oix.weight
for z in oix.children:
total += countlol(z)
return total
def solve(filename, item):
res = []
with open(filename, "r") as fp:
for line in fp:
name = line.split()[0]
value = int(line.split()[1].strip('()'))
if item == name:
if '->' in line:
for c in line.split('->')[1].split(','):
res.append(solve(filename, c.strip()))
return program(item, value, res)
for puzzle in inputs:
tree = solve(puzzle, 'rqwgj')
for c in tree.children[0].children[0].children:
print(c.name, countlol(c))
#print(puzzle, solve(puzzle, 'rqwgj'))

13
7/example.txt Normal file
View File

@ -0,0 +1,13 @@
pbga (66)
xhth (57)
ebii (61)
havc (66)
ktlj (57)
fwft (72) -> ktlj, cntj, xhth
qoyq (66)
padx (45) -> pbga, havc, qoyq
tknk (41) -> ugml, padx, fwft
jptl (61)
ugml (68) -> gyxo, ebii, jptl
gyxo (61)
cntj (57)

1078
7/input.txt Normal file

File diff suppressed because it is too large Load Diff