import re def checkpw(a, b, l, pw): try: c = pw[a-1] d = pw[b-1] if c == l or d == l: if c == l and d == l: return False return True return False except IndexError as e: print(a, b, l, pw) print(e) def main(): patt = re.compile("^(\d+)-(\d+) (.): (.+)$") with open("input2.txt") as file: lines = file.readlines() ln = [] for line in lines: m = re.match(patt, line) ln.append([int(m.group(1)), int(m.group(2)), m.group(3), m.group(4)]) valid = [pw for pw in ln if checkpw(pw[0], pw[1], pw[2], pw[3])] print(f"There are {len(valid)} valid passwords out of {len(ln)}.") if __name__ == "__main__": main()