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 | |
| parent | 10caeb18b9c224c8b42ca724e956dba35807ec2c (diff) | |
| download | aoc-424ffd61c58eb127f9a657a854737e2d82368217.tar.gz aoc-424ffd61c58eb127f9a657a854737e2d82368217.zip | |
Day 5 2025
Diffstat (limited to '2025')
| -rw-r--r-- | 2025/05/a.py | 15 | ||||
| -rw-r--r-- | 2025/05/b.py | 26 | ||||
| -rw-r--r-- | 2025/README.md | 8 |
3 files changed, 47 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)) | ||
diff --git a/2025/README.md b/2025/README.md index 8fccef4..a77c168 100644 --- a/2025/README.md +++ b/2025/README.md | |||
| @@ -11,6 +11,7 @@ Example | |||
| 11 | 11 | ||
| 12 | ``` | 12 | ``` |
| 13 | Day -Part 1- -Part 2- | 13 | Day -Part 1- -Part 2- |
| 14 | 5 00:04:39 00:22:19 | ||
| 14 | 4 00:25:36 00:27:49 | 15 | 4 00:25:36 00:27:49 |
| 15 | 3 00:05:02 00:16:09 | 16 | 3 00:05:02 00:16:09 |
| 16 | 2 00:10:36 00:11:55 | 17 | 2 00:10:36 00:11:55 |
| @@ -61,3 +62,10 @@ out of bounds. | |||
| 61 | 62 | ||
| 62 | For part 2 I decided to quickly code the dumb "repeat part 1 until no | 63 | For part 2 I decided to quickly code the dumb "repeat part 1 until no |
| 63 | rolls are removed" strategy and it worked. | 64 | rolls are removed" strategy and it worked. |
| 65 | |||
| 66 | ### Day 5: Cafeteria | ||
| 67 | |||
| 68 | Part 2 required a little bit of thinking to handle overlaps correctly | ||
| 69 | - at first I wrote a solution that did not handle overlaps, then one | ||
| 70 | that can only handle single overlaps, and finally one that works in | ||
| 71 | every case. My final solution is quite straightforward. | ||
