38 lines
1.1 KiB
Python
Executable File
38 lines
1.1 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
import aoclib
|
|
import re
|
|
|
|
DAY = 2
|
|
splitter = re.compile(r'([0-9]+)-([0-9]+) ([a-z]): (.*)')
|
|
|
|
|
|
def part1(test_mode=False):
|
|
my_input = aoclib.getInputAsArray(day=2, test=test_mode)
|
|
valid_count = 0
|
|
for line in my_input:
|
|
match = re.match(splitter, line)
|
|
(min_count, max_count, character, password) = match.group(1, 2, 3, 4)
|
|
if int(min_count) <= password.count(character) <= int(max_count):
|
|
valid_count = valid_count + 1
|
|
|
|
return valid_count
|
|
|
|
|
|
def part2(test_mode=False):
|
|
my_input = aoclib.getInputAsArray(day=2, test=test_mode)
|
|
valid_count = 0
|
|
for line in my_input:
|
|
match = re.match(splitter, line)
|
|
(min_count, max_count, character, password) = match.group(1, 2, 3, 4)
|
|
if (password[int(min_count) - 1] == character) ^ (password[int(max_count) - 1] == character):
|
|
valid_count = valid_count + 1
|
|
|
|
return valid_count
|
|
|
|
|
|
if __name__ == '__main__':
|
|
assert part1(test_mode=True) == 2, "Part 1 TEST FAILED"
|
|
aoclib.printSolution(DAY, 1, part1())
|
|
assert part2(test_mode=True) == 1, "Part 2 TEST FAILED"
|
|
aoclib.printSolution(DAY, 2, part2())
|