-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathday7.py
More file actions
32 lines (26 loc) · 1.37 KB
/
day7.py
File metadata and controls
32 lines (26 loc) · 1.37 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import re
def getPossibilities(bag, bagRules):
possibilities = []
for bagRule in bagRules:
if bag in bagRule[1]:
possibilities.append(bagRule[0].strip())
possibilities += getPossibilities(bagRule[0].strip(), bagRules)
return possibilities
def getNumberOfBagsInside(bag, bagRules):
numberOfInnerBags = 0
for bagRule in bagRules:
if bag in bagRule[0]:
if 'no other' in bagRule[1]: return 0
for innerBag in bagRule[1].split(','):
numberOfInnerBag = int(re.search(r'\d+', innerBag).group(0))
innerBagColor = re.sub(r'\d+|[.]', '', innerBag).strip()
numberOfInnerBags += numberOfInnerBag * getNumberOfBagsInside(innerBagColor, bagRules) + numberOfInnerBag
return numberOfInnerBags
bagRules = [line.strip().replace('bags','').replace('bag','') for line in open('day7input.txt')]
bagRules = [rule.split('contain') for rule in bagRules]
print(len(set(getPossibilities('shiny gold', bagRules))))
print(getNumberOfBagsInside('shiny gold', bagRules))
bagRulesSmall = [line.strip().replace('bags','').replace('bag','') for line in open('day7small.txt')]
bagRulesSmall = [rule.split('contain') for rule in bagRulesSmall]
print(len(set(getPossibilities('shiny gold', bagRulesSmall))))
print(getNumberOfBagsInside('shiny gold', bagRulesSmall))