from typing import Iterator, Any, Generator, List from aoc import BaseAssignment class Assignment(BaseAssignment): def read_input(self, example = False) -> Generator: group = [] for line in super().read_input(example): if len(line) == 0: yield group group = [] continue group.append(line) yield group class AssignmentOne(Assignment): def run(self, input: Iterator) -> Any: return sum([ len(set(''.join(group))) for group in input ]) class AssignmentTwo(Assignment): def everyone_same_answer_count(self, group: List): answer_count = {} for person in group: for answer in person: answer_count[answer] = answer_count[answer] + 1 \ if answer in answer_count \ else 1 return sum([ 1 for value in answer_count.values() if value == len(group) ]) def run(self, input: Iterator) -> Any: return sum([ self.everyone_same_answer_count(group) for group in input ])