diff options
Diffstat (limited to '2025/05/b.py')
| -rw-r--r-- | 2025/05/b.py | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/2025/05/b.py b/2025/05/b.py new file mode 100644 index 0000000..09bc5e4 --- /dev/null +++ b/2025/05/b.py | |||
| @@ -0,0 +1,26 @@ | |||
| 1 | import fileinput | ||
| 2 | |||
| 3 | def overlap(r1, r2): | ||
| 4 | return min(r1[1], r2[1]) >= max(r1[0], r2[0]) | ||
| 5 | |||
| 6 | def fuse(r1, r2): | ||
| 7 | return (min(r1[0], r2[0]), max(r1[1], r2[1])) | ||
| 8 | |||
| 9 | ranges = [] | ||
| 10 | with fileinput.input() as lines: | ||
| 11 | for line in lines: | ||
| 12 | if line == '\n': | ||
| 13 | break | ||
| 14 | i = line.find('-') | ||
| 15 | ranges.append((int(line[:i]), int(line[i+1:-1]))) | ||
| 16 | |||
| 17 | s = set() | ||
| 18 | for r in ranges: | ||
| 19 | c = r | ||
| 20 | for rr in list(s): | ||
| 21 | if overlap(c, rr): | ||
| 22 | c = fuse(c, rr) | ||
| 23 | s.remove(rr) | ||
| 24 | s.add(c) | ||
| 25 | |||
| 26 | print(sum(r[1] - r[0] + 1 for r in s)) | ||
