diff --git a/2020/d02/ex2/ex2.py b/2020/d02/ex2/ex2.py new file mode 100755 index 0000000..2e11cca --- /dev/null +++ b/2020/d02/ex2/ex2.py @@ -0,0 +1,43 @@ +#!/usr/bin/env python + +import re +import sys +from dataclasses import dataclass +from typing import List + + +@dataclass +class Policy: + min: int + max: int + letter: str + + +@dataclass +class Password: + policy: Policy + password: str + + +def is_valid(pwd: Password) -> bool: + min = pwd.password[pwd.policy.min - 1] == pwd.policy.letter + max = pwd.password[pwd.policy.max - 1] == pwd.policy.letter + return min ^ max + + +def solve(passwords: List[Password]) -> int: + return sum(map(is_valid, passwords)) + + +def main() -> None: + pattern = re.compile("([0-9]+)-([0-9]+) (.): (.+)") + input = [ + Password(Policy(int(m.group(1)), int(m.group(2)), m.group(3)), m.group(4)) + for m in (pattern.match(line) for line in sys.stdin.readlines()) + if m + ] + print(solve(input)) + + +if __name__ == "__main__": + main()