From 75d2f9fd035b0c2e8bd36b0f131005dad0f3af44 Mon Sep 17 00:00:00 2001 From: Tom van der Lee Date: Sat, 12 Dec 2020 10:49:16 +0100 Subject: Added day4 part one --- day4/__init__.py | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 day4/__init__.py (limited to 'day4/__init__.py') 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 @@ +from dataclasses import dataclass +from typing import Generator, List + +from aoc import BaseAssignment + +@dataclass +class Passport: + byr: int = None + iyr: int = None + eyr: int = None + hgt: str = None + hcl: str = None + ecl: str = None + pid: str = None + cid: str = None + + +class Assignment(BaseAssignment): + def create_passport(self, items: List[List]) -> Passport: + return Passport(**dict(items)) + + def read_input(self, example = False) -> Generator: + passport = [] + + for item in super().read_input(example): + if item == '': + yield self.create_passport(passport) + passport = [] + continue + + for field in item.split(' '): + passport.append(field.split(':')) + + yield self.create_passport(passport) + + def valid_passport(self, passport: Passport): + raise NotImplementedError('Please implement valid_passport') + + def run(self, input: Generator): + valid_passports = 0 + for passport in input: + if self.valid_passport(passport): + valid_passports += 1 + return valid_passports + +class AssignmentOne(Assignment): + def valid_passport(self, passport: Passport) -> bool: + return all([ + val + for key, val in vars(passport).items() + if key != 'cid' + ]) + +class AssignmentTwo(Assignment): + pass \ No newline at end of file -- cgit v1.2.3