master
Raw Download raw file
 1class Bunch:
 2    def __init__(self, **kwds):
 3        self.__dict__.update(kwds)
 4
 5
 6def read_input():
 7    with open("input/d02p1.txt") as f:
 8        return f.readlines()
 9
10
11def parse(line):
12    c = line.split(":")
13    pw = c[1].lstrip()
14    req = c[0].lstrip()
15
16    s = req.split(" ")
17    letter = s[1]
18    counts = s[0]
19
20    d = counts.split("-")
21    pos1 = int(d[0])
22    pos2 = int(d[1])
23
24    return Bunch(
25        pw=pw,
26        letter=letter,
27        pos1=pos1,
28        pos2=pos2,
29    )
30
31
32def valid_p1(p):
33    letter_count = p.pw.count(p.letter)
34    if letter_count >= p.pos1 and letter_count <= p.pos2:
35        return 1
36    return 0
37
38
39def valid_p2(p):
40    pos1_valid = p.pw[p.pos1 - 1] == p.letter
41    pos2_valid = p.pw[p.pos2 - 1] == p.letter
42    if pos1_valid ^ pos2_valid:
43        return 1
44    return 0
45
46
47input_lines = read_input()
48parsed_lines = [parse(line.strip()) for line in input_lines]
49valid_lines_p1 = [valid_p1(parsed_line) for parsed_line in parsed_lines]
50valid_lines_p2 = [valid_p2(parsed_line) for parsed_line in parsed_lines]
51print("p1:", sum(valid_lines_p1))
52print("p2:", sum(valid_lines_p2))