diff options
Diffstat (limited to 'day2')
| -rw-r--r-- | day2/__init__ (conflicted copy 2023-12-03 150713).py | 40 | ||||
| -rw-r--r-- | day2/__init__.py | 89 | ||||
| -rw-r--r-- | day2/example.txt | 5 | ||||
| -rw-r--r-- | day2/input.txt | 100 |
4 files changed, 234 insertions, 0 deletions
diff --git a/day2/__init__ (conflicted copy 2023-12-03 150713).py b/day2/__init__ (conflicted copy 2023-12-03 150713).py new file mode 100644 index 0000000..1191e0f --- /dev/null +++ b/day2/__init__ (conflicted copy 2023-12-03 150713).py | |||
| @@ -0,0 +1,40 @@ | |||
| 1 | # -*- coding: utf-8 -*- | ||
| 2 | from abc import ABC | ||
| 3 | from enum import Enum | ||
| 4 | from typing import Iterator | ||
| 5 | |||
| 6 | from aoc import BaseAssignment, I, T | ||
| 7 | |||
| 8 | |||
| 9 | class Color(Enum): | ||
| 10 | red = 'red' | ||
| 11 | green = 'green' | ||
| 12 | blue = 'blue' | ||
| 13 | |||
| 14 | ColorCount = tuple[int, Color] | ||
| 15 | |||
| 16 | class Assignment(BaseAssignment, ABC): | ||
| 17 | def parse_item(self, item: str) -> list[tuple[ColorCount, ...]]: | ||
| 18 | _, items = item.split(': ') | ||
| 19 | |||
| 20 | return [ | ||
| 21 | tuple( | ||
| 22 | tuple(( | ||
| 23 | int(_.split(' ')[0]), | ||
| 24 | Color(_.split(' ')[1]) | ||
| 25 | )) | ||
| 26 | for _ in pair.split(', ') | ||
| 27 | ) | ||
| 28 | for pair in items.split('; ') | ||
| 29 | ] | ||
| 30 | |||
| 31 | |||
| 32 | class AssignmentOne(Assignment): | ||
| 33 | example_result = 8 | ||
| 34 | def run(self, input: Iterator[I]) -> T: | ||
| 35 | for i in input: | ||
| 36 | print(i) | ||
| 37 | |||
| 38 | |||
| 39 | class AssignmentTwo(Assignment): | ||
| 40 | pass | ||
diff --git a/day2/__init__.py b/day2/__init__.py new file mode 100644 index 0000000..0afc441 --- /dev/null +++ b/day2/__init__.py | |||
| @@ -0,0 +1,89 @@ | |||
| 1 | # -*- coding: utf-8 -*- | ||
| 2 | from abc import ABC | ||
| 3 | from enum import Enum | ||
| 4 | from functools import reduce | ||
| 5 | from typing import Iterator | ||
| 6 | |||
| 7 | from aoc import BaseAssignment, I, T | ||
| 8 | |||
| 9 | |||
| 10 | class Color(Enum): | ||
| 11 | red = 'red' | ||
| 12 | green = 'green' | ||
| 13 | blue = 'blue' | ||
| 14 | |||
| 15 | ColorCount = tuple[int, Color] | ||
| 16 | |||
| 17 | class Assignment(BaseAssignment, ABC): | ||
| 18 | def parse_item(self, item: str) -> list[tuple[ColorCount, ...]]: | ||
| 19 | _, items = item.split(': ') | ||
| 20 | |||
| 21 | return [ | ||
| 22 | tuple( | ||
| 23 | ColorCount(( | ||
| 24 | int(_.split(' ')[0]), | ||
| 25 | Color(_.split(' ')[1]) | ||
| 26 | )) | ||
| 27 | for _ in pair.split(', ') | ||
| 28 | ) | ||
| 29 | for pair in items.split('; ') | ||
| 30 | ] | ||
| 31 | |||
| 32 | |||
| 33 | class AssignmentOne(Assignment): | ||
| 34 | example_result = 8 | ||
| 35 | |||
| 36 | inventory = { | ||
| 37 | Color.red: 12, | ||
| 38 | Color.green: 13, | ||
| 39 | Color.blue: 14, | ||
| 40 | } | ||
| 41 | |||
| 42 | def is_possible(self, game: list[tuple[ColorCount, ...]]): | ||
| 43 | for item in game: | ||
| 44 | for count, color in item: | ||
| 45 | if count > self.inventory[color]: | ||
| 46 | return False | ||
| 47 | |||
| 48 | return True | ||
| 49 | |||
| 50 | def run(self, input: Iterator[list[tuple[ColorCount, ...]]]) -> int: | ||
| 51 | possible_games = [] | ||
| 52 | |||
| 53 | for index, game in enumerate(input): | ||
| 54 | if self.is_possible(game): | ||
| 55 | possible_games.append(index + 1) | ||
| 56 | |||
| 57 | return sum(possible_games) | ||
| 58 | |||
| 59 | |||
| 60 | class AssignmentTwo(Assignment): | ||
| 61 | example_result = 2286 | ||
| 62 | |||
| 63 | def get_least_numbers(self, game: list[tuple[ColorCount, ...]]): | ||
| 64 | counts = {} | ||
| 65 | |||
| 66 | for item in game: | ||
| 67 | for count, color in item: | ||
| 68 | if color not in counts or count > counts[color]: | ||
| 69 | counts[color] = count | ||
| 70 | |||
| 71 | return counts | ||
| 72 | |||
| 73 | def run(self, input: Iterator[list[tuple[ColorCount, ...]]]) -> int: | ||
| 74 | powers = [] | ||
| 75 | |||
| 76 | for game in input: | ||
| 77 | counts = self.get_least_numbers(game) | ||
| 78 | powers.append( | ||
| 79 | reduce( | ||
| 80 | lambda total, item: total * item, | ||
| 81 | counts.values(), | ||
| 82 | 1 | ||
| 83 | ) | ||
| 84 | ) | ||
| 85 | |||
| 86 | return sum(powers) | ||
| 87 | |||
| 88 | |||
| 89 | |||
diff --git a/day2/example.txt b/day2/example.txt new file mode 100644 index 0000000..295c36d --- /dev/null +++ b/day2/example.txt | |||
| @@ -0,0 +1,5 @@ | |||
| 1 | Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green | ||
| 2 | Game 2: 1 blue, 2 green; 3 green, 4 blue, 1 red; 1 green, 1 blue | ||
| 3 | Game 3: 8 green, 6 blue, 20 red; 5 blue, 4 red, 13 green; 5 green, 1 red | ||
| 4 | Game 4: 1 green, 3 red, 6 blue; 3 green, 6 red; 3 green, 15 blue, 14 red | ||
| 5 | Game 5: 6 red, 1 blue, 3 green; 2 blue, 1 red, 2 green | ||
diff --git a/day2/input.txt b/day2/input.txt new file mode 100644 index 0000000..70852bf --- /dev/null +++ b/day2/input.txt | |||
| @@ -0,0 +1,100 @@ | |||
| 1 | Game 1: 13 green, 3 red; 4 red, 9 green, 4 blue; 9 green, 10 red, 2 blue | ||
| 2 | Game 2: 3 red, 8 green, 1 blue; 4 green, 11 blue, 2 red; 3 blue, 2 red, 6 green; 5 green, 15 blue, 1 red; 2 blue, 2 red, 5 green; 12 blue, 7 green, 2 red | ||
| 3 | Game 3: 1 red, 9 green, 3 blue; 8 green, 4 red, 11 blue; 6 red, 10 blue; 6 green, 6 red, 12 blue; 2 blue, 11 green, 7 red; 12 blue, 9 green, 8 red | ||
| 4 | Game 4: 7 red, 2 green, 1 blue; 12 green; 12 green | ||
| 5 | Game 5: 15 red, 3 green, 1 blue; 6 red, 2 blue, 2 green; 3 green, 3 red, 1 blue; 2 blue, 13 red, 5 green; 2 green, 15 red, 2 blue | ||
| 6 | Game 6: 3 blue, 15 red, 1 green; 8 green, 5 red, 6 blue; 9 green, 5 blue, 6 red; 9 green, 3 blue, 9 red; 10 green, 14 red, 2 blue | ||
| 7 | Game 7: 6 green, 1 red, 11 blue; 6 green, 1 red, 3 blue; 4 green, 20 blue; 2 red, 5 blue, 4 green; 10 green, 17 blue | ||
| 8 | Game 8: 10 blue, 9 green, 10 red; 9 green, 1 red; 8 red, 9 green, 9 blue; 5 green, 3 red, 7 blue | ||
| 9 | Game 9: 7 blue, 1 red; 5 red, 4 green; 4 green, 6 red, 5 blue; 2 green, 4 blue; 3 green, 6 blue, 4 red; 1 green, 3 red, 3 blue | ||
| 10 | Game 10: 2 red, 2 green, 2 blue; 10 blue, 2 red, 1 green; 2 green, 9 blue, 3 red | ||
| 11 | Game 11: 8 red, 4 blue, 1 green; 3 red; 1 green; 2 green, 3 blue | ||
| 12 | Game 12: 10 red, 2 green, 4 blue; 4 red, 2 green; 1 blue, 1 red, 1 green; 10 red, 1 green, 5 blue | ||
| 13 | Game 13: 20 blue, 9 green, 7 red; 13 red, 13 blue, 16 green; 17 blue, 6 red, 6 green; 1 red, 1 blue, 9 green; 9 blue, 18 green, 7 red | ||
| 14 | Game 14: 6 blue, 14 red; 9 red, 8 blue; 2 red, 1 green, 8 blue; 3 blue, 1 green, 9 red; 8 blue, 2 green, 1 red | ||
| 15 | Game 15: 3 red, 1 blue, 5 green; 2 red, 3 green; 5 red, 5 green, 1 blue; 2 green, 6 red; 4 red, 1 blue; 6 red, 1 blue, 1 green | ||
| 16 | Game 16: 5 blue, 7 red, 2 green; 7 red, 12 blue; 10 blue, 11 green, 5 red; 11 red, 11 blue, 10 green | ||
| 17 | Game 17: 3 red, 7 blue; 1 blue, 14 green, 4 red; 11 blue, 4 red, 11 green; 18 blue, 5 red, 11 green; 18 blue, 1 red, 8 green | ||
| 18 | Game 18: 8 green, 2 red, 6 blue; 8 blue, 11 green; 2 red, 11 blue, 9 green | ||
| 19 | Game 19: 11 red, 9 green, 3 blue; 19 green, 9 red, 2 blue; 19 green, 4 blue, 4 red; 1 green, 11 red; 10 red, 2 green, 4 blue | ||
| 20 | Game 20: 2 blue, 3 red, 1 green; 1 red, 3 green; 7 blue, 1 green, 4 red; 1 red, 8 blue, 7 green; 6 blue, 3 red; 5 red, 3 blue, 7 green | ||
| 21 | Game 21: 1 green, 1 blue, 10 red; 1 green, 5 red, 8 blue; 11 red, 4 blue; 6 blue, 6 red | ||
| 22 | Game 22: 6 blue, 6 green; 8 green, 15 blue; 8 green, 3 blue, 1 red; 11 blue, 2 red, 7 green | ||
| 23 | Game 23: 1 green, 3 blue, 7 red; 4 red, 1 green, 2 blue; 3 red, 2 blue, 2 green | ||
| 24 | Game 24: 4 green, 8 blue, 4 red; 2 green, 9 blue; 4 green, 1 red; 2 green, 5 blue, 1 red; 2 blue, 3 red, 3 green; 6 blue | ||
| 25 | Game 25: 7 blue; 15 blue, 5 red; 6 blue, 12 red; 1 green, 17 red; 13 blue, 5 red; 17 red | ||
| 26 | Game 26: 1 blue, 3 green, 7 red; 9 red, 4 green, 1 blue; 1 red, 2 green, 1 blue; 11 red, 3 green; 10 red, 4 green, 2 blue; 6 red, 4 green | ||
| 27 | Game 27: 4 blue, 6 red; 2 blue, 8 red, 1 green; 3 blue, 3 red; 2 red, 1 blue; 1 green, 3 blue, 6 red | ||
| 28 | Game 28: 1 red, 7 blue, 7 green; 2 green, 1 red, 4 blue; 8 green, 2 red; 2 red, 7 blue, 5 green; 12 green, 5 blue, 2 red; 1 red, 1 green, 2 blue | ||
| 29 | Game 29: 10 green, 3 red, 6 blue; 9 green, 6 blue, 4 red; 3 red, 2 blue, 17 green | ||
| 30 | Game 30: 8 blue; 15 blue, 1 red; 10 green, 2 red, 13 blue | ||
| 31 | Game 31: 10 green, 2 blue, 7 red; 2 green, 1 blue; 1 blue, 15 green, 2 red; 7 green, 2 blue; 3 blue, 6 green, 8 red; 6 red, 1 blue | ||
| 32 | Game 32: 2 blue, 2 red, 11 green; 10 green, 2 red, 1 blue; 1 green, 2 blue; 2 red, 9 green, 2 blue; 2 blue, 1 green; 5 green, 1 blue, 2 red | ||
| 33 | Game 33: 8 red, 6 blue; 2 green, 3 red, 2 blue; 1 green, 13 red, 18 blue | ||
| 34 | Game 34: 7 blue, 5 green; 5 green, 8 blue; 13 blue, 15 red, 2 green | ||
| 35 | Game 35: 1 blue, 2 green; 9 green; 4 red, 14 green; 1 red, 1 blue, 17 green | ||
| 36 | Game 36: 2 red, 14 green, 4 blue; 13 green, 3 blue; 1 blue, 7 green, 2 red; 4 blue, 9 green; 1 green, 3 blue, 1 red; 2 red, 4 blue, 10 green | ||
| 37 | Game 37: 2 blue, 7 green, 5 red; 5 green, 2 blue; 6 blue, 11 red | ||
| 38 | Game 38: 6 green, 6 red; 9 red, 10 green; 2 blue, 8 green, 8 red | ||
| 39 | Game 39: 10 red, 3 blue; 5 green, 3 red; 5 red, 7 green | ||
| 40 | Game 40: 5 red, 14 green, 2 blue; 5 red, 7 blue, 12 green; 2 green, 4 red; 1 red, 16 green, 3 blue; 16 green, 4 red, 7 blue; 9 green, 2 red | ||
| 41 | Game 41: 4 red, 3 green, 2 blue; 13 green, 6 blue; 2 red, 14 green, 1 blue; 7 blue, 2 red, 14 green | ||
| 42 | Game 42: 4 red; 1 blue, 5 red; 1 green, 6 red; 1 red, 1 blue; 3 blue, 8 red | ||
| 43 | Game 43: 7 blue, 16 red, 1 green; 2 red, 6 green, 1 blue; 5 green, 3 red; 5 green, 9 blue, 2 red; 3 red, 9 blue, 4 green; 7 red, 9 blue | ||
| 44 | Game 44: 2 red, 2 green; 5 red, 1 blue, 8 green; 7 green, 3 blue, 5 red | ||
| 45 | Game 45: 8 blue, 16 red; 8 blue; 4 blue, 1 green, 8 red | ||
| 46 | Game 46: 11 green, 9 blue, 1 red; 8 green, 7 blue; 10 blue, 1 red, 1 green; 12 green, 10 blue | ||
| 47 | Game 47: 3 green, 6 red, 1 blue; 2 blue, 2 green, 12 red; 3 red, 2 green, 1 blue | ||
| 48 | Game 48: 3 red, 3 green, 3 blue; 3 red, 4 green, 2 blue; 2 green, 7 red, 1 blue; 2 red, 3 blue, 5 green | ||
| 49 | Game 49: 5 red, 7 blue, 5 green; 10 red, 4 green, 7 blue; 9 red, 17 green; 6 green, 1 red, 2 blue; 7 green, 8 blue, 5 red | ||
| 50 | Game 50: 2 red, 4 green, 16 blue; 4 blue, 3 red, 8 green; 4 blue, 2 red, 6 green | ||
| 51 | Game 51: 16 green, 10 red, 14 blue; 8 red, 4 blue, 12 green; 14 green, 7 blue; 6 red, 20 green, 3 blue | ||
| 52 | Game 52: 1 red, 1 blue, 1 green; 9 green, 9 red; 4 green, 13 red; 7 red, 11 green; 4 red, 1 blue; 8 green, 3 red, 1 blue | ||
| 53 | Game 53: 4 green, 11 blue; 9 green, 2 red; 6 red, 18 green, 13 blue; 6 red, 2 blue, 14 green | ||
| 54 | Game 54: 1 green, 1 red, 1 blue; 2 green, 4 blue; 4 blue, 5 green; 3 blue, 1 red, 10 green | ||
| 55 | Game 55: 8 blue, 2 red, 3 green; 9 red, 11 blue; 1 green, 12 blue, 4 red; 3 green, 17 red; 3 red, 3 green, 15 blue; 7 blue, 7 red, 2 green | ||
| 56 | Game 56: 3 blue, 13 green; 9 green, 2 blue; 1 red, 2 blue, 16 green | ||
| 57 | Game 57: 6 blue, 4 red; 3 green, 6 red; 2 red, 3 blue, 3 green; 8 red, 5 blue | ||
| 58 | Game 58: 4 red, 15 green, 5 blue; 1 red, 16 blue, 14 green; 2 green, 17 blue, 6 red; 20 blue, 3 red, 7 green; 17 green, 1 red, 12 blue | ||
| 59 | Game 59: 3 blue, 14 red; 5 green, 10 red, 2 blue; 2 blue, 5 red, 6 green | ||
| 60 | Game 60: 4 red, 1 blue, 1 green; 15 blue; 8 green, 14 blue, 4 red; 9 blue, 3 green, 4 red; 4 green, 2 red, 11 blue; 4 blue, 7 green | ||
| 61 | Game 61: 5 green, 9 blue, 16 red; 4 blue, 12 green, 4 red; 17 red, 7 green, 5 blue; 19 blue, 12 red, 17 green; 8 green, 13 red | ||
| 62 | Game 62: 13 green, 1 red, 7 blue; 9 blue, 1 red, 4 green; 14 green, 2 red, 2 blue; 3 green | ||
| 63 | Game 63: 6 green; 7 red, 3 blue, 8 green; 5 blue, 1 green, 6 red; 6 green, 6 red, 2 blue; 8 green, 2 blue | ||
| 64 | Game 64: 16 blue, 1 red, 2 green; 4 green, 1 blue, 6 red; 6 green, 2 blue, 2 red; 17 blue; 1 red; 13 blue, 6 green, 1 red | ||
| 65 | Game 65: 8 red, 3 green, 7 blue; 6 blue, 8 red, 2 green; 2 blue, 3 green, 17 red | ||
| 66 | Game 66: 2 blue, 3 green, 3 red; 3 red, 2 blue; 5 red, 4 green, 3 blue; 1 blue, 3 green; 2 red, 1 green, 1 blue; 2 blue, 4 green | ||
| 67 | Game 67: 2 red, 3 blue, 15 green; 2 blue, 2 red, 17 green; 4 blue, 3 red, 2 green; 6 red; 3 red, 8 green | ||
| 68 | Game 68: 7 red, 1 blue, 12 green; 17 red, 1 green; 10 red, 8 green; 16 red, 5 green, 2 blue; 4 red, 1 blue, 8 green; 8 green, 7 red, 2 blue | ||
| 69 | Game 69: 17 green, 9 red, 2 blue; 1 blue, 14 green, 3 red; 9 red, 12 green, 2 blue; 11 green, 2 blue, 7 red | ||
| 70 | Game 70: 1 green, 8 blue, 2 red; 2 red, 10 green, 1 blue; 1 red, 12 green, 6 blue; 9 green, 4 blue, 4 red; 2 red, 6 green; 3 red, 8 green, 6 blue | ||
| 71 | Game 71: 1 red, 5 blue; 12 blue, 3 red; 3 red, 2 green, 4 blue; 5 blue, 3 green, 1 red | ||
| 72 | Game 72: 11 red, 6 blue; 1 red, 1 blue, 1 green; 2 blue, 7 red; 18 blue, 3 red; 1 green, 1 blue, 12 red | ||
| 73 | Game 73: 4 red, 2 blue, 1 green; 3 red; 5 red, 1 blue; 4 blue, 6 red | ||
| 74 | Game 74: 2 red; 2 red, 5 green; 4 green, 1 red, 1 blue; 1 blue, 5 green, 5 red; 7 red, 1 blue, 3 green; 8 red, 1 blue, 6 green | ||
| 75 | Game 75: 13 blue, 2 red, 2 green; 2 red, 9 blue; 2 red, 9 blue, 5 green | ||
| 76 | Game 76: 2 red, 3 green, 18 blue; 2 red, 11 green, 5 blue; 6 green, 8 blue, 2 red; 4 blue; 7 green, 14 blue | ||
| 77 | Game 77: 5 blue, 8 red, 1 green; 2 blue, 5 green, 12 red; 3 red, 4 blue | ||
