diff options
| author | 2020-12-13 22:05:22 +0100 | |
|---|---|---|
| committer | 2020-12-13 22:05:22 +0100 | |
| commit | 2dae8ff6da421943e26af83866765a024c8f6650 (patch) | |
| tree | 78d4a79f96ee88bd7cdcfdfd16b78c5e74ad91d7 /day7 | |
| parent | 80d66a0f76a949d67e4f89ac3ebe4a877c90a095 (diff) | |
| download | 2021-2dae8ff6da421943e26af83866765a024c8f6650.tar.gz 2021-2dae8ff6da421943e26af83866765a024c8f6650.tar.bz2 2021-2dae8ff6da421943e26af83866765a024c8f6650.zip | |
Added day 7
Diffstat (limited to 'day7')
| -rw-r--r-- | day7/__init__.py | 58 | ||||
| -rw-r--r-- | day7/example.txt | 9 | ||||
| -rw-r--r-- | day7/input.txt | 594 |
3 files changed, 661 insertions, 0 deletions
diff --git a/day7/__init__.py b/day7/__init__.py new file mode 100644 index 0000000..375c67a --- /dev/null +++ b/day7/__init__.py | |||
| @@ -0,0 +1,58 @@ | |||
| 1 | import re | ||
| 2 | from functools import lru_cache | ||
| 3 | from typing import Iterator, Any, Generator, Dict | ||
| 4 | |||
| 5 | from aoc import BaseAssignment | ||
| 6 | |||
| 7 | rule_matcher = re.compile( | ||
| 8 | r'(?P<bag>\w+\ \w+) bags contain (?P<contains>no other bags|(((, )?\d \w+\ \w+ bags?)+))\.') | ||
| 9 | contains_matcher = re.compile(r'(?P<count>\d+) (?P<bag>\w+\ \w+) bags?') | ||
| 10 | |||
| 11 | |||
| 12 | class Assignment(BaseAssignment): | ||
| 13 | def get_bag_contents(self, contents: str) -> dict: | ||
| 14 | content_dict = {} | ||
| 15 | if contents != 'no other bags': | ||
| 16 | for content in contents.split(', '): | ||
| 17 | count = contains_matcher.match(content).groupdict() | ||
| 18 | content_dict[count['bag']] = int(count['count']) | ||
| 19 | |||
| 20 | return content_dict | ||
| 21 | |||
| 22 | def read_input(self, example=False) -> Dict: | ||
| 23 | self.mapping = {} | ||
| 24 | |||
| 25 | for line in super().read_input(example): | ||
| 26 | match = rule_matcher.match(line) | ||
| 27 | rule = match.groupdict() | ||
| 28 | self.mapping[rule['bag']] = self.get_bag_contents(rule['contains']) | ||
| 29 | |||
| 30 | |||
| 31 | class AssignmentOne(Assignment): | ||
| 32 | @lru_cache | ||
| 33 | def contains_shiny_gold_bag(self, bag): | ||
| 34 | if 'shiny gold' in self.mapping[bag]: | ||
| 35 | return True | ||
| 36 | |||
| 37 | return any([ | ||
| 38 | self.contains_shiny_gold_bag(containing_bag) | ||
| 39 | for containing_bag in self.mapping[bag].keys() | ||
| 40 | ]) | ||
| 41 | |||
| 42 | def run(self, input) -> Any: | ||
| 43 | nr_of_possibilities = 0 | ||
| 44 | for bag, contains in self.mapping.items(): | ||
| 45 | if self.contains_shiny_gold_bag(bag): | ||
| 46 | nr_of_possibilities += 1 | ||
| 47 | return nr_of_possibilities | ||
| 48 | |||
| 49 | |||
| 50 | class AssignmentTwo(Assignment): | ||
| 51 | def nr_of_bags_inside(self, bag): | ||
| 52 | return sum([ | ||
| 53 | count + (count * self.nr_of_bags_inside(containing_bag)) | ||
| 54 | for containing_bag, count in self.mapping[bag].items() | ||
| 55 | ]) | ||
| 56 | |||
| 57 | def run(self, input) -> Any: | ||
| 58 | return self.nr_of_bags_inside('shiny gold') | ||
diff --git a/day7/example.txt b/day7/example.txt new file mode 100644 index 0000000..e7ba02e --- /dev/null +++ b/day7/example.txt | |||
| @@ -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. \ No newline at end of file | ||
diff --git a/day7/input.txt b/day7/input.txt new file mode 100644 index 0000000..555513a --- /dev/null +++ b/day7/input.txt | |||
| @@ -0,0 +1,594 @@ | |||
| 1 | light salmon bags contain 5 dark brown bags, 2 dotted coral bags, 5 mirrored turquoise bags. | ||
| 2 | drab magenta bags contain 1 vibrant purple bag, 5 dark lime bags, 2 clear silver bags. | ||
| 3 | striped coral bags contain 2 dim lime bags. | ||
| 4 | drab cyan bags contain 1 dark lime bag. | ||
| 5 | bright purple bags contain 5 posh salmon bags, 1 posh blue bag, 1 shiny lavender bag. | ||
| 6 | dull tomato bags contain 2 shiny maroon bags, 1 posh salmon bag, 4 posh teal bags, 5 dark orange bags. | ||
| 7 | faded aqua bags contain 3 striped salmon bags, 5 dim purple bags, 3 shiny gold bags, 4 drab indigo bags. | ||
| 8 | drab maroon bags contain 2 dark gray bags, 3 mirrored tan bags, 4 pale blue bags, 4 dim black bags. | ||
| 9 | posh blue bags contain 1 mirrored maroon bag, 4 striped lavender bags. | ||
| 10 | dull orange bags contain 2 light aqua bags, 2 striped chartreuse bags, 4 dim bronze bags. | ||
| 11 | vibrant fuchsia bags contain 1 clear orange bag, 1 plaid turquoise bag, 3 posh maroon bags, 4 light silver bags. | ||
| 12 | posh violet bags contain 5 plaid violet bags, 5 vibrant turquoise bags, 1 pale orange bag. | ||
| 13 | light gray bags contain 5 vibrant tan bags, 4 shiny tomato bags, 5 muted olive bags. | ||
| 14 | striped teal bags contain 2 drab cyan bags, 3 dull tomato bags, 1 light gold bag, 1 dark beige bag. | ||
| 15 | muted orange bags contain 3 pale blue bags, 1 muted coral bag. | ||
| 16 | wavy magenta bags contain 1 dotted crimson bag. | ||
| 17 | dark fuchsia bags contain 3 plaid yellow bags, 4 dim green bags. | ||
| 18 | drab beige bags contain 4 dull brown bags. | ||
| 19 | light olive bags contain 2 posh magenta bags, 4 dim crimson bags. | ||
| 20 | wavy chartreuse bags contain 3 plaid magenta bags. | ||
| 21 | dim cyan bags contain 4 light lime bags, 3 dim crimson bags, 1 striped green bag. | ||
| 22 | vibrant violet bags contain 2 dark teal bags, 5 vibrant turquoise bags. | ||
| 23 | drab tomato bags contain 2 vibrant salmon bags, 5 bright salmon bags. | ||
| 24 | mirrored lime bags contain 5 striped teal bags, 3 dim lavender bags, 4 dim cyan bags, 2 dotted green bags. | ||
| 25 | wavy plum bags contain 4 plaid magenta bags. | ||
| 26 | dim brown bags contain 1 dull yellow bag, 2 plaid beige bags. | ||
| 27 | posh magenta bags contain 4 vibrant turquoise bags. | ||
| 28 | posh maroon bags contain 3 dark teal bags, 2 striped plum bags. | ||
| 29 | pale magenta bags contain 4 dim chartreuse bags, 3 mirrored salmon bags. | ||
| 30 | shiny blue bags contain 2 shiny violet bags, 3 pale red bags, 5 pale salmon bags. | ||
| 31 | clear tan bags contain 3 wavy lavender bags. | ||
| 32 | pale bronze bags contain 3 muted chartreuse bags. | ||
| 33 | pale tomato bags contain 1 dotted brown bag, 1 posh lavender bag, 2 striped violet bags. | ||
| 34 | dotted lime bags contain 3 light magenta bags, 2 clear yellow bags, 3 faded olive bags. | ||
| 35 | shiny tan bags contain 2 dotted fuchsia bags, 5 dull crimson bags, 5 clear orange bags. | ||
| 36 | light lavender bags contain 3 shiny tomato bags, 5 drab beige bags, 3 mirrored yellow bags. | ||
| 37 | wavy bronze bags contain 2 muted green bags, 3 dotted bronze bags. | ||
| 38 | faded brown bags contain 3 drab gold bags, 3 dotted red bags, 1 dim white bag. | ||
| 39 | muted cyan bags contain 4 striped turquoise bags. | ||
| 40 | faded tan bags contain 1 muted red bag, 1 mirrored tan bag, 4 shiny purple bags. | ||
| 41 | dark violet bags contain 4 posh tomato bags. | ||
| 42 | posh purple bags contain 3 shiny violet bags, 4 clear indigo bags. | ||
| 43 | vibrant orange bags contain 1 dim salmon bag, 1 vibrant olive bag, 4 drab fuchsia bags. | ||
| 44 | dull blue bags contain 5 pale lavender bags, 3 dark lavender bags, 1 mirrored yellow bag. | ||
| 45 | muted white bags contain 3 dark salmon bags, 4 posh bronze bags, 5 pale plum bags. | ||
| 46 | striped lavender bags contain 4 faded plum bags, 2 dark tomato bags, 2 plaid teal bags. | ||
| 47 | dark gold bags contain 4 dark lime bags. | ||
| 48 | dull magenta bags contain 2 muted chartreuse bags. | ||
| 49 | striped cyan bags contain 4 dotted red bags, 3 drab lime bags. | ||
| 50 | dotted bronze bags contain 1 clear magenta bag, 2 bright salmon bags. | ||
| 51 | clear lavender bags contain 4 dim lime bags. | ||
| 52 | plaid salmon bags contain 2 dark orange bags. | ||
| 53 | posh silver bags contain 5 muted fuchsia bags, 4 muted crimson bags. | ||
| 54 | bright plum bags contain 3 vibrant salmon bags, 3 clear tan bags. | ||
| 55 | posh beige bags contain 3 mirrored lavender bags, 4 pale olive bags, 2 dotted black bags. | ||
| 56 | bright yellow bags contain 3 mirrored violet bags. | ||
| 57 | plaid green bags contain 5 striped black bags, 5 posh bronze bags, 5 mirrored teal bags. | ||
| 58 | plaid coral bags contain 5 plaid beige bags, 5 drab chartreuse bags. | ||
| 59 | dotted maroon bags contain 4 dotted indigo bags, 4 dotted coral bags. | ||
| 60 | dotted chartreuse bags contain 2 wavy turquoise bags, 2 posh indigo bags, 3 plaid silver bags, 2 mirrored salmon bags. | ||
| 61 | dark yellow bags contain 1 posh brown bag, 4 light tan bags, 2 clear fuchsia bags, 5 dotted black bags. | ||
| 62 | dull lavender bags contain 4 plaid green bags, 1 striped plum bag, 3 drab teal bags. | ||
| 63 | bright maroon bags contain 1 dotted tan bag, 4 light olive bags, 5 posh cyan bags. | ||
| 64 | vibrant gold bags contain 2 faded gold bags. | ||
| 65 | dim lavender bags contain 3 dark silver bags, 1 striped violet bag, 2 dotted bronze bags, 1 striped black bag. | ||
| 66 | light tomato bags contain 2 striped chartreuse bags. | ||
| 67 | dull yellow bags contain 5 drab tomato bags. | ||
| 68 | dotted coral bags contain 1 dark blue bag, 1 mirrored teal bag, 1 drab tomato bag. | ||
| 69 | pale lime bags contain 3 clear cyan bags, 5 pale silver bags, 4 wavy olive bags. | ||
| 70 | wavy red bags contain 3 vibrant gray bags, 4 shiny teal bags, 4 clear maroon bags. | ||
| 71 | pale beige bags contain 2 shiny teal bags, 2 posh fuchsia bags, 4 dark aqua bags, 4 posh orange bags. | ||
| 72 | striped tomato bags contain 2 light coral bags. | ||
| 73 | shiny violet bags contain 4 vibrant chartreuse bags, 3 wavy lavender bags. | ||
| 74 | plaid teal bags contain 3 mirrored teal bags. | ||
| 75 | clear black bags contain 2 faded beige bags, 4 faded tan bags, 1 light salmon bag, 5 wavy white bags. | ||
| 76 | clear yellow bags contain 2 dull tan bags, 5 plaid gold bags. | ||
| 77 | faded green bags contain 5 light brown bags. | ||
| 78 | bright coral bags contain 5 dotted teal bags, 2 mirrored gray bags, 3 wavy lime bags. | ||
| 79 | muted bronze bags contain 3 dim maroon bags, 3 shiny beige bags, 4 light bronze bags. | ||
| 80 | vibrant crimson bags contain 4 dim brown bags, 3 dotted maroon bags, 4 vibrant gold bags, 5 dull tomato bags. | ||
| 81 | pale green bags contain 4 plaid beige bags. | ||
| 82 | dull green bags contain 2 clear salmon bags, 2 dark bronze bags. | ||
| 83 | dotted tan bags contain 1 dim tan bag. | ||
| 84 | muted plum bags contain 3 faded crimson bags, 5 muted violet bags, 5 striped violet bags, 2 drab silver bags. | ||
| 85 | faded coral bags contain 2 dark plum bags, 1 muted cyan bag, 3 vibrant beige bags. | ||
| 86 | vibrant brown bags contain 4 striped maroon bags, 4 bright cyan bags. | ||
| 87 | drab coral bags contain 3 vibrant coral bags, 3 dark aqua bags. | ||
| 88 | striped chartreuse bags contain 2 vibrant salmon bags, 2 posh bronze bags, 3 drab teal bags. | ||
| 89 | bright indigo bags contain 4 faded plum bags. | ||
| 90 | clear olive bags contain 4 muted turquoise bags, 1 dotted olive bag. | ||
| 91 | drab yellow bags contain 1 dim brown bag, 4 plaid green bags, 2 posh red bags. | ||
| 92 | striped purple bags contain 2 mirrored orange bags, 4 vibrant chartreuse bags, 1 pale orange bag, 2 shiny green bags. | ||
| 93 | mirrored olive bags contain 1 faded gold bag, 1 vibrant chartreuse bag, 5 faded brown bags, 3 wavy indigo bags. | ||
| 94 | dull aqua bags contain 3 muted black bags, 2 muted orange bags, 2 pale lime bags, 4 dark plum bags. | ||
| 95 | light lime bags contain 5 plaid beige bags, 5 shiny gold bags, 3 plaid plum bags. | ||
| 96 | vibrant beige bags contain 2 posh maroon bags, 3 dotted plum bags. | ||
| 97 | mirrored yellow bags contain 4 dotted crimson bags, 3 drab olive bags, 1 faded bronze bag, 2 striped violet bags. | ||
| 98 | mirrored plum bags contain 4 dotted gray bags, 1 striped fuchsia bag, 3 dim yellow bags. | ||
| 99 | faded beige bags contain 5 striped chartreuse bags, 3 faded bronze bags, 3 dark lime bags. | ||
| 100 | drab crimson bags contain 2 dull green bags, 1 muted teal bag. | ||
| 101 | shiny salmon bags contain 3 wavy olive bags, 1 faded crimson bag, 1 clear chartreuse bag. | ||
| 102 | vibrant turquoise bags contain 4 drab black bags. | ||
| 103 | dim yellow bags contain 5 shiny blue bags. | ||
| 104 | wavy maroon bags contain 5 pale brown bags. | ||
| 105 | dark coral bags contain 2 bright teal bags, 3 bright green bags, 3 drab coral bags. | ||
| 106 | bright beige bags contain 3 faded salmon bags, 5 plaid coral bags. | ||
| 107 | posh gray bags contain 5 bright silver bags, 1 pale brown bag. | ||
| 108 | plaid orange bags contain 3 faded olive bags, 4 muted fuchsia bags, 5 vibrant turquoise bags. | ||
| 109 | faded indigo bags contain 1 muted silver bag, 3 dim green bags, 3 faded purple bags, 1 plaid beige bag. | ||
| 110 | drab lavender bags contain 5 light blue bags. | ||
| 111 | light coral bags contain 3 pale orange bags, 2 plaid teal bags. | ||
| 112 | posh indigo bags contain 2 drab olive bags, 2 dim cyan bags, 2 light teal bags. | ||
| 113 | muted fuchsia bags contain 2 wavy white bags, 1 dark tan bag. | ||
| 114 | muted brown bags contain 5 drab coral bags, 4 dull brown bags, 4 mirrored black bags. | ||
| 115 | bright aqua bags contain 3 clear orange bags. | ||
| 116 | faded magenta bags contain 1 striped violet bag, 1 dull lavender bag. | ||
| 117 | clear brown bags contain 4 mirrored green bags, 1 clear fuchsia bag, 2 vibrant violet bags, 1 shiny aqua bag. | ||
| 118 | clear green bags contain 3 dotted brown bags, 2 faded plum bags, 3 dotted beige bags, 2 striped brown bags. | ||
| 119 | dull violet bags contain 2 vibrant violet bags, 4 light coral bags, 3 clear black bags. | ||
| 120 | light gold bags contain no other bags. | ||
| 121 | striped silver bags contain 4 clear bronze bags, 1 striped plum bag, 3 dull yellow bags. | ||
| 122 | dull indigo bags contain 5 wavy olive bags, 3 shiny tomato bags, 3 vibrant lime bags, 4 dark beige bags. | ||
| 123 | dark teal bags contain 2 dark blue bags, 4 mirrored teal bags, 4 posh bronze bags, 1 muted gold bag. | ||
| 124 | light cyan bags contain 3 drab olive bags, 2 plaid teal bags, 5 vibrant indigo bags. | ||
| 125 | clear turquoise bags contain 3 bright teal bags. | ||
| 126 | clear white bags contain 4 faded black bags. | ||
| 127 | plaid olive bags contain 3 vibrant blue bags, 5 posh gold bags. | ||
| 128 | drab turquoise bags contain 3 striped black bags, 1 dull brown bag, 5 dark lime bags. | ||
| 129 | plaid tomato bags contain 1 dim orange bag. | ||
| 130 | wavy lime bags contain 3 muted crimson bags, 2 shiny green bags. | ||
| 131 | dim salmon bags contain 4 faded black bags, 4 mirrored teal bags, 4 drab tomato bags, 2 vibrant green bags. | ||
| 132 | pale lavender bags contain 2 striped violet bags. | ||
| 133 | pale violet bags contain 5 dim magenta bags, 1 muted cyan bag, 5 clear red bags, 2 pale fuchsia bags. | ||
| 134 | dark purple bags contain 2 light red bags. | ||
| 135 | drab blue bags contain 2 dark blue bags, 2 dotted bronze bags, 4 bright teal bags. | ||
| 136 | wavy white bags contain 3 dim red bags, 1 vibrant chartreuse bag, 3 muted gray bags. | ||
| 137 | muted beige bags contain 1 shiny purple bag. | ||
| 138 | dim aqua bags contain 1 muted yellow bag, 3 drab green bags, 2 plaid magenta bags. | ||
| 139 | pale orange bags contain 5 mirrored teal bags, 4 dark aqua bags, 5 shiny gold bags. | ||
| 140 | clear coral bags contain 5 dark white bags, 5 light blue b | ||
