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