Skip to content

Commit 950ec22

Browse files
committedDec 7, 2020
Day 7
1 parent d5bf4f6 commit 950ec22

File tree

5 files changed

+725
-0
lines changed

5 files changed

+725
-0
lines changed
 

‎2020/7.txt

+594
Large diffs are not rendered by default.

‎2020/7_test.txt

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
light red bags contain 1 bright white bag, 2 muted yellow bags.
2+
dark orange bags contain 3 bright white bags, 4 muted yellow bags.
3+
bright white bags contain 1 shiny gold bag.
4+
muted yellow bags contain 2 shiny gold bags, 9 faded blue bags.
5+
shiny gold bags contain 1 dark olive bag, 2 vibrant plum bags.
6+
dark olive bags contain 3 faded blue bags, 4 dotted black bags.
7+
vibrant plum bags contain 5 faded blue bags, 6 dotted black bags.
8+
faded blue bags contain no other bags.
9+
dotted black bags contain no other bags.

‎2020/7_test2.txt

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
shiny gold bags contain 2 dark red bags.
2+
dark red bags contain 2 dark orange bags.
3+
dark orange bags contain 2 dark yellow bags.
4+
dark yellow bags contain 2 dark green bags.
5+
dark green bags contain 2 dark blue bags.
6+
dark blue bags contain 2 dark violet bags.
7+
dark violet bags contain no other bags.

‎2020/7a.py

+57
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
from aocd import submit
2+
import re
3+
from aoc import *
4+
from collections import defaultdict
5+
6+
7+
def submita(answer):
8+
submit(answer, part='a', day=7, year=2020)
9+
10+
11+
def submitb(answer):
12+
submit(answer, part='b', day=7, year=2020)
13+
14+
15+
FILE = '7_test.txt'
16+
FILE = '7.txt'
17+
18+
19+
class Bag:
20+
def __init__(self):
21+
self.name = None
22+
self.parents = set()
23+
self.children = {}
24+
25+
26+
def backtrack(bag, s, bags, depth):
27+
for p in bag.parents:
28+
if p not in s:
29+
s.add(p)
30+
backtrack(bags[p], s, bags, depth+1)
31+
32+
33+
def main():
34+
inp = lines(FILE)
35+
bags = defaultdict(Bag)
36+
for l in inp:
37+
b = re.match(r'(.+ .+) bags contain (.+)\.|(.+ .+) bags contain no other bags\.', l)
38+
outer_bag = b[1]
39+
inside = b[2]
40+
if inside != 'no other bags':
41+
ins = re.findall(r'(\d+) (.+? .+?) bags?(?:, )?', inside)
42+
for number, name in ins:
43+
bags[outer_bag].children[name] = int(number)
44+
bags[name].parents.add(outer_bag)
45+
for k, v in bags.items():
46+
v.name = k
47+
print('OK')
48+
contain_gold = set()
49+
backtrack(bags['shiny gold'], contain_gold, bags, 1)
50+
out = len(contain_gold)
51+
print(out)
52+
input()
53+
print('submitting')
54+
submita(out)
55+
56+
57+
main()

‎2020/7b.py

+58
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
from aocd import submit
2+
import re
3+
from aoc import *
4+
from collections import defaultdict
5+
6+
7+
def submita(answer):
8+
submit(answer, part='a', day=7, year=2020)
9+
10+
11+
def submitb(answer):
12+
submit(answer, part='b', day=7, year=2020)
13+
14+
15+
FILE = '7_test.txt'
16+
FILE = '7_test2.txt'
17+
FILE = '7.txt'
18+
19+
20+
class Bag:
21+
def __init__(self):
22+
self.name = None
23+
self.parents = set()
24+
self.children = {}
25+
26+
27+
def downtrack(bag, bags):
28+
number = 1
29+
for p, n in bag.children.items():
30+
print(p, n)
31+
number += n * downtrack(bags[p], bags)
32+
return number
33+
34+
35+
def main():
36+
inp = lines(FILE)
37+
bags = defaultdict(Bag)
38+
for l in inp:
39+
b = re.match(r'(.+ .+) bags contain (.+)\.|(.+ .+) bags contain no other bags\.', l)
40+
outer_bag = b[1]
41+
inside = b[2]
42+
if inside != 'no other bags':
43+
ins = re.findall(r'(\d+) (.+? .+?) bags?(?:, )?', inside)
44+
for number, name in ins:
45+
bags[outer_bag].children[name] = int(number)
46+
bags[name].parents.add(outer_bag)
47+
for k, v in bags.items():
48+
v.name = k
49+
print('OK')
50+
out = downtrack(bags['shiny gold'], bags)
51+
out -= 1
52+
print(out)
53+
input()
54+
print('submitting')
55+
submitb(out)
56+
57+
58+
main()

0 commit comments

Comments
 (0)
Please sign in to comment.