summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--day2/__init__ (conflicted copy 2023-12-03 150713).py40
-rw-r--r--day2/__init__.py89
-rw-r--r--day2/example.txt5
-rw-r--r--day2/input.txt100
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 -*-
2from abc import ABC
3from enum import Enum
4from typing import Iterator
5
6from aoc import BaseAssignment, I, T
7
8
9class Color(Enum):
10 red = 'red'
11 green = 'green'
12 blue = 'blue'
13
14ColorCount = tuple[int, Color]
15
16class 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
32class AssignmentOne(Assignment):
33 example_result = 8
34 def run(self, input: Iterator[I]) -> T:
35 for i in input:
36 print(i)
37
38
39class 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 -*-
2from abc import ABC
3from enum import Enum
4from functools import reduce
5from typing import Iterator
6
7from aoc import BaseAssignment, I, T
8
9
10class Color(Enum):
11 red = 'red'
12 green = 'green'
13 blue = 'blue'
14
15ColorCount = tuple[int, Color]
16
17class 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
33class 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
60class 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 @@
1Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green
2Game 2: 1 blue, 2 green; 3 green, 4 blue, 1 red; 1 green, 1 blue
3Game 3: 8 green, 6 blue, 20 red; 5 blue, 4 red, 13 green; 5 green, 1 red
4Game 4: 1 green, 3 red, 6 blue; 3 green, 6 red; 3 green, 15 blue, 14 red
5Game 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 @@
1Game 1: 13 green, 3 red; 4 red, 9 green, 4 blue; 9 green, 10 red, 2 blue
2Game 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
3Game 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
4Game 4: 7 red, 2 green, 1 blue; 12 green; 12 green
5Game 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
6Game 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
7Game 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
8Game 8: 10 blue, 9 green, 10 red; 9 green, 1 red; 8 red, 9 green, 9 blue; 5 green, 3 red, 7 blue
9Game 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
10Game 10: 2 red, 2 green, 2 blue; 10 blue, 2 red, 1 green; 2 green, 9 blue, 3 red
11Game 11: 8 red, 4 blue, 1 green; 3 red; 1 green; 2 green, 3 blue
12Game 12: 10 red, 2 green, 4 blue; 4 red, 2 green; 1 blue, 1 red, 1 green; 10 red, 1 green, 5 blue
13Game 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
14Game 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
15Game 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
16Game 16: 5 blue, 7 red, 2 green; 7 red, 12 blue; 10 blue, 11 green, 5 red; 11 red, 11 blue, 10 green
17Game 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
18Game 18: 8 green, 2 red, 6 blue; 8 blue, 11 green; 2 red, 11 blue, 9 green
19Game 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
20Game 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
21Game 21: 1 green, 1 blue, 10 red; 1 green, 5 red, 8 blue; 11 red, 4 blue; 6 blue, 6 red
22Game 22: 6 blue, 6 green; 8 green, 15 blue; 8 green, 3 blue, 1 red; 11 blue, 2 red, 7 green
23Game 23: 1 green, 3 blue, 7 red; 4 red, 1 green, 2 blue; 3 red, 2 blue, 2 green
24Game 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
25Game 25: 7 blue; 15 blue, 5 red; 6 blue, 12 red; 1 green, 17 red; 13 blue, 5 red; 17 red
26Game 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
27Game 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
28Game 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
29Game 29: 10 green, 3 red, 6 blue; 9 green, 6 blue, 4 red; 3 red, 2 blue, 17 green
30Game 30: 8 blue; 15 blue, 1 red; 10 green, 2 red, 13 blue
31Game 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
32Game 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
33Game 33: 8 red, 6 blue; 2 green, 3 red, 2 blue; 1 green, 13 red, 18 blue
34Game 34: 7 blue, 5 green; 5 green, 8 blue; 13 blue, 15 red, 2 green
35Game 35: 1 blue, 2 green; 9 green; 4 red, 14 green; 1 red, 1 blue, 17 green
36Game 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
37Game 37: 2 blue, 7 green, 5 red; 5 green, 2 blue; 6 blue, 11 red
38Game 38: 6 green, 6 red; 9 red, 10 green; 2 blue, 8 green, 8 red
39Game 39: 10 red, 3 blue; 5 green, 3 red; 5 red, 7 green
40Game 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
41Game 41: 4 red, 3 green, 2 blue; 13 green, 6 blue; 2 red, 14 green, 1 blue; 7 blue, 2 red, 14 green
42Game 42: 4 red; 1 blue, 5 red; 1 green, 6 red; 1 red, 1 blue; 3 blue, 8 red
43Game 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
44Game 44: 2 red, 2 green; 5 red, 1 blue, 8 green; 7 green, 3 blue, 5 red
45Game 45: 8 blue, 16 red; 8 blue; 4 blue, 1 green, 8 red
46Game 46: 11 green, 9 blue, 1 red; 8 green, 7 blue; 10 blue, 1 red, 1 green; 12 green, 10 blue
47Game 47: 3 green, 6 red, 1 blue; 2 blue, 2 green, 12 red; 3 red, 2 green, 1 blue
48Game 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
49Game 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
50Game 50: 2 red, 4 green, 16 blue; 4 blue, 3 red, 8 green; 4 blue, 2 red, 6 green
51Game 51: 16 green, 10 red, 14 blue; 8 red, 4 blue, 12 green; 14 green, 7 blue; 6 red, 20 green, 3 blue
52Game 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
53Game 53: 4 green, 11 blue; 9 green, 2 red; 6 red, 18 green, 13 blue; 6 red, 2 blue, 14 green
54Game 54: 1 green, 1 red, 1 blue; 2 green, 4 blue; 4 blue, 5 green; 3 blue, 1 red, 10 green
55Game 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
56Game 56: 3 blue, 13 green; 9 green, 2 blue; 1 red, 2 blue, 16 green
57Game 57: 6 blue, 4 red; 3 green, 6 red; 2 red, 3 blue, 3 green; 8 red, 5 blue
58Game 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
59Game 59: 3 blue, 14 red; 5 green, 10 red, 2 blue; 2 blue, 5 red, 6 green
60Game 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
61Game 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
62Game 62: 13 green, 1 red, 7 blue; 9 blue, 1 red, 4 green; 14 green, 2 red, 2 blue; 3 green
63Game 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
64Game 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
65Game 65: 8 red, 3 green, 7 blue; 6 blue, 8 red, 2 green; 2 blue, 3 green, 17 red
66Game 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
67Game 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
68Game 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
69Game 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
70Game 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
71Game 71: 1 red, 5 blue; 12 blue, 3 red; 3 red, 2 green, 4 blue; 5 blue, 3 green, 1 red
72Game 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
73Game 73: 4 red, 2 blue, 1 green; 3 red; 5 red, 1 blue; 4 blue, 6 red
74Game 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
75Game 75: 13 blue, 2 red, 2 green; 2 red, 9 blue; 2 red, 9 blue, 5 green
76Game 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