Consolidate ranges before handling them separately.
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
from typing import Optional
|
from typing import Optional, Iterator
|
||||||
|
|
||||||
def magnitude(x : int) -> int:
|
def magnitude(x : int) -> int:
|
||||||
assert x >= 0
|
assert x >= 0
|
||||||
@@ -61,6 +61,24 @@ def sum_invalid_ids(lo : int, hi : int) -> int:
|
|||||||
|
|
||||||
return total
|
return total
|
||||||
|
|
||||||
|
def consolidate(rngs : list[tuple[int, int]]) -> Iterator[tuple[int, int]]:
|
||||||
|
rngs = sorted(rngs)
|
||||||
|
cur = None
|
||||||
|
for lo, hi in rngs:
|
||||||
|
match cur:
|
||||||
|
case None:
|
||||||
|
cur = lo, hi
|
||||||
|
|
||||||
|
case cur_lo, cur_hi:
|
||||||
|
if lo <= cur_hi:
|
||||||
|
cur = cur_lo, hi
|
||||||
|
else:
|
||||||
|
yield cur
|
||||||
|
cur = lo, hi
|
||||||
|
|
||||||
|
assert cur
|
||||||
|
yield cur
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
ranges = [
|
ranges = [
|
||||||
(int(lo_s), int(hi_s))
|
(int(lo_s), int(hi_s))
|
||||||
@@ -71,7 +89,7 @@ if __name__ == '__main__':
|
|||||||
]
|
]
|
||||||
|
|
||||||
total = 0
|
total = 0
|
||||||
for lo, hi in ranges:
|
for lo, hi in consolidate(ranges):
|
||||||
total += sum_invalid_ids(lo, hi)
|
total += sum_invalid_ids(lo, hi)
|
||||||
|
|
||||||
print(total)
|
print(total)
|
||||||
|
|||||||
Reference in New Issue
Block a user