diff options
| author | Sebastiano Tronto <sebastiano@tronto.net> | 2025-12-05 06:39:31 +0100 |
|---|---|---|
| committer | Sebastiano Tronto <sebastiano@tronto.net> | 2025-12-05 06:39:31 +0100 |
| commit | 424ffd61c58eb127f9a657a854737e2d82368217 (patch) | |
| tree | 6b3504b264cc9dec2c2f38c7312eb5b766114f2f /2025/05 | |
| parent | 10caeb18b9c224c8b42ca724e956dba35807ec2c (diff) | |
| download | aoc-424ffd61c58eb127f9a657a854737e2d82368217.tar.gz aoc-424ffd61c58eb127f9a657a854737e2d82368217.zip | |
Day 5 2025
Diffstat (limited to '2025/05')
| -rw-r--r-- | 2025/05/a.py | 15 | ||||
| -rw-r--r-- | 2025/05/b.py | 26 |
2 files changed, 39 insertions, 2 deletions
diff --git a/2025/05/a.py b/2025/05/a.py index 5fdb11b..b2699ba 100644 --- a/2025/05/a.py +++ b/2025/05/a.py | |||
| @@ -1,6 +1,17 @@ | |||
| 1 | import fileinput | 1 | import fileinput |
| 2 | 2 | ||
| 3 | rang = True | ||
| 4 | ranges = [] | ||
| 5 | s = 0 | ||
| 3 | with fileinput.input() as lines: | 6 | with fileinput.input() as lines: |
| 4 | for line in lines: | 7 | for line in lines: |
| 5 | ... | 8 | if line == '\n': |
| 6 | 9 | rang = False | |
| 10 | elif rang: | ||
| 11 | i = line.find('-') | ||
| 12 | ranges.append((int(line[:i]), int(line[i+1:-1]))) | ||
| 13 | else: | ||
| 14 | x = int(line[:-1]) | ||
| 15 | if any(x >= r[0] and x <= r[1] for r in ranges): | ||
| 16 | s += 1 | ||
| 17 | print(s) | ||
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)) | ||
