Skip to content

Commit ac672d4

Browse files
committed
AOC 2025 day 5
1 parent fb1301b commit ac672d4

File tree

11 files changed

+106
-15
lines changed

11 files changed

+106
-15
lines changed

adventofcode/README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1658,7 +1658,7 @@
16581658
[20242402tests]: src/test/java/org/ck/adventofcode/year2024/Day24Test.java
16591659
[20242501tests]: src/test/java/org/ck/adventofcode/year2024/Day25Test.java
16601660

1661-
# 2025 (8/24)
1661+
# 2025 (10/24)
16621662

16631663
| # | Name | Solution | Test |
16641664
|---------:|-------------------------------------------------|:------------------------------------:|:---------------------------------:|
@@ -1670,8 +1670,8 @@
16701670
| 20250302 | [Day 3: Lobby - Part 2][20250302] | ✅[💾][20250302solution] | ✅[💾][20250302tests] |
16711671
| 20250401 | [Day 4: Printing Department][20250401] | ✅[💾][20250401solution] | ✅[💾][20250401tests] |
16721672
| 20250402 | [Day 4: Printing Department - Part 2][20250402] | ✅[💾][20250402solution] | ✅[💾][20250402tests] |
1673-
| 20250501 | [Day 5: ][20250501] | [💾][20250501solution] | [💾][20250501tests] |
1674-
| 20250502 | [Day 5: - Part 2][20250502] | [💾][20250502solution] | [💾][20250502tests] |
1673+
| 20250501 | [Day 5: Cafeteria ][20250501] | ✅[💾][20250501solution] | ✅[💾][20250501tests] |
1674+
| 20250502 | [Day 5: Cafeteria - Part 2][20250502] | ✅[💾][20250502solution] | ✅[💾][20250502tests] |
16751675
| 20250601 | [Day 6: ][20250601] | [💾][20250601solution] | [💾][20250601tests] |
16761676
| 20250602 | [Day 6: - Part 2][20250602] | [💾][20250602solution] | [💾][20250602tests] |
16771677
| 20250701 | [Day 7: ][20250701] | [💾][20250701solution] | [💾][20250701tests] |
Lines changed: 75 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,99 @@
11
package org.ck.adventofcode.year2025;
22

33
import java.util.*;
4+
import java.util.function.ToLongFunction;
45
import org.ck.adventofcode.util.AOCSolution;
56
import org.ck.codechallengelib.annotation.Solution;
67

78
@Solution(
89
id = 20250501,
9-
name = "Day 5: ",
10+
name = "Day 5: Cafeteria ",
1011
url = "https://adventofcode.com/2025/day/5",
11-
category = "2025",
12-
solved = false)
12+
category = "2025")
1313
@Solution(
1414
id = 20250502,
15-
name = "Day 5: - Part 2",
15+
name = "Day 5: Cafeteria - Part 2",
1616
url = "https://adventofcode.com/2025/day/5#part2",
17-
category = "2025",
18-
solved = false)
17+
category = "2025")
1918
public class Day05 extends AOCSolution {
2019

2120
@Override
2221
protected void runPartOne(final Scanner in) {
23-
run(in);
22+
run(in, getAvailableFreshIngredientsCount(in));
2423
}
2524

2625
@Override
2726
protected void runPartTwo(final Scanner in) {
28-
run(in);
27+
run(in, Day05::getAllFreshIngredientsCount);
2928
}
3029

31-
private void run(final Scanner in) {
32-
// not yet implemented
30+
private void run(final Scanner in, final ToLongFunction<Set<Range>> getPartIngredientCount) {
31+
final Set<Range> ranges = new HashSet<>();
32+
33+
while (in.hasNextLine()) {
34+
final String line = in.nextLine();
35+
36+
if (line.isBlank()) {
37+
break;
38+
}
39+
40+
final String[] parts = line.split("-");
41+
ranges.add(new Range(Long.parseLong(parts[0]), Long.parseLong(parts[1])));
42+
}
43+
44+
print(getPartIngredientCount.applyAsLong(ranges));
45+
}
46+
47+
private static ToLongFunction<Set<Range>> getAvailableFreshIngredientsCount(final Scanner in) {
48+
return ranges -> {
49+
long fresh = 0;
50+
while (in.hasNextLine()) {
51+
final long ingredient = Long.parseLong(in.nextLine());
52+
53+
for (final Range range : ranges) {
54+
if (ingredient >= range.start && ingredient <= range.end) {
55+
++fresh;
56+
break;
57+
}
58+
}
59+
}
60+
61+
return fresh;
62+
};
3363
}
64+
65+
private static long getAllFreshIngredientsCount(final Set<Range> ranges) {
66+
Set<Range> fresh = ranges;
67+
boolean merged = true;
68+
while (merged) {
69+
Set<Range> newFresh = new HashSet<>(fresh);
70+
merged = false;
71+
72+
for (Range first : fresh) {
73+
for (Range second : fresh) {
74+
if (first != second && first.end >= second.start && first.end <= second.end) {
75+
merged = true;
76+
newFresh.remove(first);
77+
newFresh.remove(second);
78+
newFresh.add(new Range(Math.min(first.start, second.start), second.end));
79+
break;
80+
}
81+
}
82+
83+
if (merged) {
84+
break;
85+
}
86+
}
87+
88+
fresh = newFresh;
89+
}
90+
91+
long freshCount = 0;
92+
for (Range range : fresh) {
93+
freshCount += range.end - range.start + 1;
94+
}
95+
return freshCount;
96+
}
97+
98+
private record Range(long start, long end) {}
3499
}

adventofcode/src/test/java/org/ck/adventofcode/year2025/Day05Test.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
package org.ck.adventofcode.year2025;
22

33
import org.ck.adventofcode.util.BaseAOCTest;
4-
import org.junit.jupiter.api.Disabled;
54
import org.junit.jupiter.params.ParameterizedTest;
65
import org.junit.jupiter.params.provider.ValueSource;
76

8-
@Disabled
97
class Day05Test extends BaseAOCTest {
108
@ParameterizedTest
119
@ValueSource(strings = {"01a"})
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
558

adventofcode/src/test/resources/org/ck/adventofcode/year2025/day05/01.txt

Lines changed: 1 addition & 0 deletions
Large diffs are not rendered by default.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
3
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
3-5
2+
10-14
3+
16-20
4+
12-18
5+
6+
1
7+
5
8+
8
9+
11
10+
17
11+
32
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
344813017450467

adventofcode/src/test/resources/org/ck/adventofcode/year2025/day05/02.txt

Lines changed: 1 addition & 0 deletions
Large diffs are not rendered by default.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
14

0 commit comments

Comments
 (0)