import operator as op import re import sys from collections import defaultdict from typing import Callable MFCSAM: dict[str, int] = { "children": 3, "cats": 7, "samoyeds": 2, "pomeranians": 3, "akitas": 0, "vizslas": 0, "goldfish": 5, "trees": 3, "cars": 2, "perfumes": 1, } lines = sys.stdin.readlines() aunts: list[dict[str, int]] = [ { match[1]: int(match[2]) for match in re.findall(R"((?P[^:, ]+): (?P\d+))", line) } for line in lines ] def match(operators: dict[str, Callable[[int, int], bool]]) -> int: return next( i for i, aunt in enumerate(aunts, start=1) if all(operators[k](aunt[k], MFCSAM[k]) for k in aunt) ) answer_1 = match(defaultdict(lambda: op.eq)) print(f"answer 1 is {answer_1}") answer_2 = match( defaultdict( lambda: op.eq, trees=op.gt, cats=op.gt, pomeranians=op.lt, goldfish=op.lt, ) ) print(f"answer 2 is {answer_2}")