Python, mit RegEx
#!/usr/bin/env python3
import re
def main():
input = parse_input("02-input.txt")
print(f"Policy 1: {check_passwords(input)} passwords valid")
print(f"Policy 2: {check_passwords_differently(input)} passwords valid")
def parse_input(filename: str) -> list[tuple[int, int, str, str]]:
parsed = []
with open(filename, "r") as file:
for line in file:
match = re.match(r"(\d+)-(\d+) ([a-z]): (\w+)", line)
parsed.append(
(int(match.group(1)), int(match.group(2)), *match.group(3, 4)))
return parsed
def check_passwords(input: list[tuple[int, int, str, str]]) -> int:
valid = 0
for min, max, letter, password in input:
if re.fullmatch(rf"[^{letter}]*({letter}[^{letter}]*){{{min},{max}}}",
password):
valid += 1
return valid
def check_passwords_differently(input: list[tuple[int, int, str, str]]) -> int:
valid = 0
for pos1, pos2, letter, password in input:
def check(pos):
return len(password) >= pos and password[pos - 1] == letter
if check(pos1) ^ check(pos2):
valid += 1
return valid
if __name__ == "__main__":
main()