-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathaoc2.py
More file actions
34 lines (30 loc) · 989 Bytes
/
Copy pathaoc2.py
File metadata and controls
34 lines (30 loc) · 989 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import re
from utils import utils
def parse(pass_str):
m = re.search(r'(\d+)-(\d+) ([a-z]): ([a-z]+)', pass_str)
lb, ub, letter, password = m.groups()
return (int(lb), int(ub), letter, password)
def part_1(data):
count = 0
for pass_str in data:
lb, ub, letter, password = parse(pass_str)
letter_count = len(re.findall(rf'{letter}', password))
if lb <= letter_count and letter_count <= ub:
count += 1
return count
def part_2(data):
count = 0
for pass_str in data:
lb, ub, letter, password = parse(pass_str)
match_lower = password[lb-1] == letter
match_upper = password[ub-1] == letter
if match_lower != match_upper:
count += 1
return count
if __name__ == "__main__":
day = 2
data = utils.get_strs_from_file(f"data/aoc{day}_data.txt")
output_1 = part_1(data)
print(output_1)
output_2 = part_2(data)
print(output_2)