56 lines
1.1 KiB
Python
56 lines
1.1 KiB
Python
import re
|
|
|
|
|
|
def isValid(number, rules):
|
|
for rulek in rules:
|
|
rule = rules[rulek]
|
|
if rule['from_1'] <= number <= rule['to_1'] or rule['from_2'] <= number <= rule['to_2']:
|
|
return True
|
|
|
|
return False
|
|
|
|
|
|
def part1():
|
|
file = open("input.txt")
|
|
lines = [line.strip() for line in file.readlines()]
|
|
|
|
i = 0
|
|
rules = {}
|
|
|
|
# Parse rules
|
|
while lines[i] != '':
|
|
rule = re.split('([a-z ]+): ([0-9]+)-([0-9]+) or ([0-9]+)-([0-9]+)', lines[i])
|
|
rules[rule[1]] = {
|
|
'from_1': int(rule[2]),
|
|
'to_1': int(rule[3]),
|
|
'from_2': int(rule[4]),
|
|
'to_2': int(rule[5])
|
|
}
|
|
i += 1
|
|
|
|
# Parse my ticket
|
|
# print(lines[i + 2])
|
|
|
|
# Parse other tickets
|
|
i += 5
|
|
sum = 0
|
|
while i < len(lines):
|
|
numbers = [int(i) for i in lines[i].split(',')]
|
|
for number in numbers:
|
|
if not isValid(number, rules):
|
|
sum += number
|
|
|
|
i += 1
|
|
|
|
print(f"Part 1: {sum}")
|
|
|
|
|
|
def part2():
|
|
file = open("input_test.txt")
|
|
print(f"Part 2:")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
part1()
|
|
part2()
|