master
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))