Skip to content

Commit 19277e0

Browse files
committed
AoC 2025 Day 3 - java
1 parent 6ca0bc1 commit 19277e0

File tree

2 files changed

+74
-1
lines changed

2 files changed

+74
-1
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
| | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
1010
| ---| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
1111
| python3 | [](src/main/python/AoC2025_01.py) | [](src/main/python/AoC2025_02.py) | [](src/main/python/AoC2025_03.py) | | | | | | | | | |
12-
| java | [](src/main/java/AoC2025_01.java) | [](src/main/java/AoC2025_02.java) | | | | | | | | | | |
12+
| java | [](src/main/java/AoC2025_01.java) | [](src/main/java/AoC2025_02.java) | [](src/main/java/AoC2025_03.java) | | | | | | | | | |
1313
| bash | [](src/main/bash/AoC2025_01.sh) | [](src/main/bash/AoC2025_02.sh) | [](src/main/bash/AoC2025_03.sh) | | | | | | | | | |
1414
<!-- @END:ImplementationsTable:2025@ -->
1515

src/main/java/AoC2025_03.java

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
import com.github.pareronia.aoc.solution.Sample;
2+
import com.github.pareronia.aoc.solution.Samples;
3+
import com.github.pareronia.aoc.solution.SolutionBase;
4+
5+
import java.util.List;
6+
7+
@SuppressWarnings({"PMD.ClassNamingConventions", "PMD.NoPackage"})
8+
public final class AoC2025_03 extends SolutionBase<List<String>, Long, Long> {
9+
10+
private AoC2025_03(final boolean debug) {
11+
super(debug);
12+
}
13+
14+
public static AoC2025_03 create() {
15+
return new AoC2025_03(false);
16+
}
17+
18+
public static AoC2025_03 createDebug() {
19+
return new AoC2025_03(true);
20+
}
21+
22+
@Override
23+
protected List<String> parseInput(final List<String> inputs) {
24+
return inputs;
25+
}
26+
27+
private long solveLine(final String line, final int digits) {
28+
int pos = 0;
29+
final StringBuilder sb = new StringBuilder();
30+
for (int i = digits; i > 0; i--) {
31+
char best = '0';
32+
for (int j = pos; j < line.length() - i + 1; j++) {
33+
final char val = line.charAt(j);
34+
if (val > best) {
35+
best = val;
36+
pos = j + 1;
37+
}
38+
}
39+
sb.append(best);
40+
}
41+
return Long.parseLong(sb.toString());
42+
}
43+
44+
private long solve(final List<String> lines, final int digits) {
45+
return lines.stream().mapToLong(line -> solveLine(line, digits)).sum();
46+
}
47+
48+
@Override
49+
public Long solvePart1(final List<String> lines) {
50+
return this.solve(lines, 2);
51+
}
52+
53+
@Override
54+
public Long solvePart2(final List<String> lines) {
55+
return this.solve(lines, 12);
56+
}
57+
58+
@Samples({
59+
@Sample(method = "part1", input = TEST, expected = "357"),
60+
@Sample(method = "part2", input = TEST, expected = "3121910778619"),
61+
})
62+
public static void main(final String[] args) throws Exception {
63+
create().run();
64+
}
65+
66+
private static final String TEST =
67+
"""
68+
987654321111111
69+
811111111111119
70+
234234234234278
71+
818181911112111
72+
""";
73+
}

0 commit comments

Comments
 (0)