add solution 7, parts 1 and 2
This commit is contained in:
parent
b616d265a2
commit
c273962081
Binary file not shown.
|
@ -0,0 +1,15 @@
|
||||||
|
File "/home/usr/git/adventofcode/2020/7/solution.py", line 52, in <module>
|
||||||
|
print(bagconfigurations(rules, Bag('shiny gold')))
|
||||||
|
File "/home/usr/git/adventofcode/2020/7/solution.py", line 42, in bagconfigurations
|
||||||
|
cnt += bagconfigurations(rules, i.bagspec())
|
||||||
|
File "/home/usr/git/adventofcode/2020/7/solution.py", line 42, in bagconfigurations
|
||||||
|
cnt += bagconfigurations(rules, i.bagspec())
|
||||||
|
File "/home/usr/git/adventofcode/2020/7/solution.py", line 42, in bagconfigurations
|
||||||
|
cnt += bagconfigurations(rules, i.bagspec())
|
||||||
|
[Previous line repeated 994 more times]
|
||||||
|
File "/home/usr/git/adventofcode/2020/7/solution.py", line 40, in bagconfigurations
|
||||||
|
if i.cancontain(bag): cnt += 1
|
||||||
|
File "/home/usr/git/adventofcode/2020/7/solution.py", line 27, in cancontain
|
||||||
|
if not i.color == bag.color: continue
|
||||||
|
RecursionError: maximum recursion depth exceeded in comparison
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
light red bags contain 1 bright white bag, 2 muted yellow bags.
|
||||||
|
dark orange bags contain 3 bright white bags, 4 muted yellow bags.
|
||||||
|
bright white bags contain 1 shiny gold bag.
|
||||||
|
muted yellow bags contain 2 shiny gold bags, 9 faded blue bags.
|
||||||
|
shiny gold bags contain 1 dark olive bag, 2 vibrant plum bags.
|
||||||
|
dark olive bags contain 3 faded blue bags, 4 dotted black bags.
|
||||||
|
vibrant plum bags contain 5 faded blue bags, 6 dotted black bags.
|
||||||
|
faded blue bags contain no other bags.
|
||||||
|
dotted black bags contain no other bags.
|
|
@ -0,0 +1,52 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
class Bag:
|
||||||
|
def __init__(self, line):
|
||||||
|
split = line.split(' ')
|
||||||
|
if split[0].isalpha():
|
||||||
|
self.adj = split[0]
|
||||||
|
self.color = split[1]
|
||||||
|
else:
|
||||||
|
self.adj = split[1]
|
||||||
|
self.color = split[2]
|
||||||
|
def __str__(self):
|
||||||
|
return "{} {} bag".format(self.adj, self.color)
|
||||||
|
class Rule:
|
||||||
|
def __init__(self, line):
|
||||||
|
contain = line.split(' contain ')
|
||||||
|
self.bag = Bag(contain[0])
|
||||||
|
if contain[1] != 'no other bags':
|
||||||
|
requires = contain[1].split(', ')
|
||||||
|
self.requires = []
|
||||||
|
for i in requires:
|
||||||
|
self.requires.append(Bag(i))
|
||||||
|
else: self.requires = []
|
||||||
|
def cancontain(self, bag):
|
||||||
|
cnt = 0
|
||||||
|
for i in self.requires:
|
||||||
|
if not i.color == bag.color: continue
|
||||||
|
if not i.adj == bag.adj: continue
|
||||||
|
cnt += 1
|
||||||
|
|
||||||
|
if cnt > 0: return True
|
||||||
|
return False
|
||||||
|
def bagspec(self):
|
||||||
|
return self.bag
|
||||||
|
def pseudoremove(list, pos):
|
||||||
|
return list[0:pos - 1] + list[pos + 1:]
|
||||||
|
def bagconfigurations(rules, bag):
|
||||||
|
cnt = 0
|
||||||
|
for i in rules:
|
||||||
|
if i.cancontain(bag): cnt += 1
|
||||||
|
for j in rules:
|
||||||
|
if j.cancontain(i.bagspec()): cnt += 1
|
||||||
|
|
||||||
|
return cnt
|
||||||
|
|
||||||
|
fd = open('sample_input', 'r')
|
||||||
|
lines = [i.rstrip() for i in fd.readlines()]
|
||||||
|
rules = []
|
||||||
|
|
||||||
|
for i in lines:
|
||||||
|
rules.append(Rule(i))
|
||||||
|
print(bagconfigurations(rules, Bag('shiny gold')))
|
Loading…
Reference in New Issue