summaryrefslogtreecommitdiffstats
path: root/day4/__init__.py
diff options
context:
space:
mode:
Diffstat (limited to 'day4/__init__.py')
-rw-r--r--day4/__init__.py55
1 files changed, 55 insertions, 0 deletions
diff --git a/day4/__init__.py b/day4/__init__.py
new file mode 100644
index 0000000..f179985
--- /dev/null
+++ b/day4/__init__.py
@@ -0,0 +1,55 @@
1from dataclasses import dataclass
2from typing import Generator, List
3
4from aoc import BaseAssignment
5
6@dataclass
7class Passport:
8 byr: int = None
9 iyr: int = None
10 eyr: int = None
11 hgt: str = None
12 hcl: str = None
13 ecl: str = None
14 pid: str = None
15 cid: str = None
16
17
18class Assignment(BaseAssignment):
19 def create_passport(self, items: List[List]) -> Passport:
20 return Passport(**dict(items))
21
22 def read_input(self, example = False) -> Generator:
23 passport = []
24
25 for item in super().read_input(example):
26 if item == '':
27 yield self.create_passport(passport)
28 passport = []
29 continue
30
31 for field in item.split(' '):
32 passport.append(field.split(':'))
33
34 yield self.create_passport(passport)
35
36 def valid_passport(self, passport: Passport):
37 raise NotImplementedError('Please implement valid_passport')
38
39 def run(self, input: Generator):
40 valid_passports = 0
41 for passport in input:
42 if self.valid_passport(passport):
43 valid_passports += 1
44 return valid_passports
45
46class AssignmentOne(Assignment):
47 def valid_passport(self, passport: Passport) -> bool:
48 return all([
49 val
50 for key, val in vars(passport).items()
51 if key != 'cid'
52 ])
53
54class AssignmentTwo(Assignment):
55 pass \ No newline at end of file