day20
This commit is contained in:
parent
b672c7cee2
commit
9f4981fced
68
day20.py
Normal file
68
day20.py
Normal file
@ -0,0 +1,68 @@
|
||||
from tools.aoc import AOCDay
|
||||
from typing import Any
|
||||
|
||||
|
||||
class Day(AOCDay):
|
||||
inputs = [
|
||||
[
|
||||
(3, "input20_test"),
|
||||
(31053880, "input20"),
|
||||
],
|
||||
[
|
||||
(117, "input20"),
|
||||
],
|
||||
]
|
||||
|
||||
def parse_input(self) -> list[tuple[int, int]]:
|
||||
rules = []
|
||||
for line in self.getInput():
|
||||
x, y = map(int, line.split("-"))
|
||||
rules.append((x, y))
|
||||
return rules
|
||||
|
||||
def condensed_rules(self) -> list[tuple[int, int]]:
|
||||
rules = self.parse_input()
|
||||
found_something = True
|
||||
while found_something:
|
||||
found_something = False
|
||||
new_rules = []
|
||||
checked = set()
|
||||
for rule in rules:
|
||||
if rule in checked:
|
||||
continue
|
||||
for sub_rule in rules:
|
||||
if rule == sub_rule or sub_rule in checked:
|
||||
continue
|
||||
if (
|
||||
rule[0] <= sub_rule[1] <= rule[1]
|
||||
or sub_rule[0] <= rule[1] <= sub_rule[1]
|
||||
or rule[1] + 1 == sub_rule[0]
|
||||
or sub_rule[1] + 1 == rule[0]
|
||||
):
|
||||
new_rules.append((min(sub_rule[0], rule[0]), max(sub_rule[1], rule[1])))
|
||||
checked.add(sub_rule)
|
||||
checked.add(rule)
|
||||
found_something = True
|
||||
break
|
||||
else:
|
||||
new_rules.append(rule)
|
||||
rules = new_rules
|
||||
|
||||
return list(sorted(rules))
|
||||
|
||||
def part1(self) -> Any:
|
||||
rules = self.condensed_rules()
|
||||
return rules[0][1] + 1
|
||||
|
||||
def part2(self) -> Any:
|
||||
ans = 0
|
||||
rules = self.condensed_rules()
|
||||
for i in range(len(rules) - 1):
|
||||
ans += rules[i + 1][0] - rules[i][1] - 1
|
||||
|
||||
return ans
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
day = Day(2016, 20)
|
||||
day.run(verbose=True)
|
||||
1029
inputs/input20
Normal file
1029
inputs/input20
Normal file
File diff suppressed because it is too large
Load Diff
3
inputs/input20_test
Normal file
3
inputs/input20_test
Normal file
@ -0,0 +1,3 @@
|
||||
5-8
|
||||
0-2
|
||||
4-7
|
||||
Loading…
Reference in New Issue
Block a user