From 04329c9fd3b5e8435a720d80a9cb6b23956e926c Mon Sep 17 00:00:00 2001 From: Bruno BELANYI Date: Wed, 2 Dec 2020 11:20:32 +0100 Subject: [PATCH] 2020: d02: ex2: add solution --- 2020/d02/ex2/ex2.py | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100755 2020/d02/ex2/ex2.py 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()