Skip to content

Commit 5f4b90a

Browse files
committed
AoC 2024 Day 10 - java
1 parent 43efdb4 commit 5f4b90a

File tree

2 files changed

+104
-1
lines changed

2 files changed

+104
-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 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 |
1010
| ---| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
1111
| python3 | [](src/main/python/AoC2024_01.py) | [](src/main/python/AoC2024_02.py) | [](src/main/python/AoC2024_03.py) | [](src/main/python/AoC2024_04.py) | [](src/main/python/AoC2024_05.py) | [](src/main/python/AoC2024_06.py) | [](src/main/python/AoC2024_07.py) | [](src/main/python/AoC2024_08.py) | [](src/main/python/AoC2024_09.py) | [](src/main/python/AoC2024_10.py) | | | | | | | | | | | | | | | |
12-
| java | [](src/main/java/AoC2024_01.java) | [](src/main/java/AoC2024_02.java) | [](src/main/java/AoC2024_03.java) | [](src/main/java/AoC2024_04.java) | [](src/main/java/AoC2024_05.java) | [](src/main/java/AoC2024_06.java) | [](src/main/java/AoC2024_07.java) | [](src/main/java/AoC2024_08.java) | | | | | | | | | | | | | | | | | |
12+
| java | [](src/main/java/AoC2024_01.java) | [](src/main/java/AoC2024_02.java) | [](src/main/java/AoC2024_03.java) | [](src/main/java/AoC2024_04.java) | [](src/main/java/AoC2024_05.java) | [](src/main/java/AoC2024_06.java) | [](src/main/java/AoC2024_07.java) | [](src/main/java/AoC2024_08.java) | | [](src/main/java/AoC2024_10.java) | | | | | | | | | | | | | | | |
1313
| rust | [](src/main/rust/AoC2024_01/src/main.rs) | [](src/main/rust/AoC2024_02/src/main.rs) | [](src/main/rust/AoC2024_03/src/main.rs) | [](src/main/rust/AoC2024_04/src/main.rs) | [](src/main/rust/AoC2024_05/src/main.rs) | [](src/main/rust/AoC2024_06/src/main.rs) | [](src/main/rust/AoC2024_07/src/main.rs) | [](src/main/rust/AoC2024_08/src/main.rs) | | | | | | | | | | | | | | | | | |
1414
<!-- @END:ImplementationsTable:2024@ -->
1515

src/main/java/AoC2024_10.java

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
import static com.github.pareronia.aoc.Utils.last;
2+
3+
import java.util.ArrayDeque;
4+
import java.util.ArrayList;
5+
import java.util.Deque;
6+
import java.util.List;
7+
8+
import com.github.pareronia.aoc.Grid.Cell;
9+
import com.github.pareronia.aoc.IntGrid;
10+
import com.github.pareronia.aoc.solution.Sample;
11+
import com.github.pareronia.aoc.solution.Samples;
12+
import com.github.pareronia.aoc.solution.SolutionBase;
13+
14+
public final class AoC2024_10 extends SolutionBase<IntGrid, Integer, Integer> {
15+
16+
private AoC2024_10(final boolean debug) {
17+
super(debug);
18+
}
19+
20+
public static AoC2024_10 create() {
21+
return new AoC2024_10(false);
22+
}
23+
24+
public static AoC2024_10 createDebug() {
25+
return new AoC2024_10(true);
26+
}
27+
28+
@Override
29+
protected IntGrid parseInput(final List<String> inputs) {
30+
return IntGrid.from(inputs);
31+
}
32+
33+
private List<List<Cell>> getTrails(final IntGrid grid) {
34+
class BFS {
35+
private final List<List<Cell>> trails = new ArrayList<>();
36+
37+
void bfs(final List<Cell> trail) {
38+
final Deque<List<Cell>> q = new ArrayDeque<>(List.of(trail));
39+
while (!q.isEmpty()) {
40+
final List<Cell> curr = q.pop();
41+
if (curr.size() == 10) {
42+
trails.add(curr);
43+
continue;
44+
}
45+
final int next = grid.getValue(last(curr)) + 1;
46+
grid.getCapitalNeighbours(last(curr))
47+
.filter(n -> grid.getValue(n) == next)
48+
.forEach(n -> {
49+
final List<Cell> newTrail = new ArrayList<>(curr);
50+
newTrail.add(n);
51+
q.add(newTrail);
52+
});
53+
}
54+
}
55+
}
56+
57+
final BFS bfs = new BFS();
58+
grid.getAllEqualTo(0).forEach(zero -> bfs.bfs(List.of(zero)));
59+
return bfs.trails;
60+
}
61+
62+
@Override
63+
public Integer solvePart1(final IntGrid grid) {
64+
final List<List<Cell>> trails = getTrails(grid);
65+
return trails.stream()
66+
.map(trail -> trail.get(0))
67+
.distinct()
68+
.mapToInt(zero -> (int) trails.stream()
69+
.filter(trail -> trail.get(0).equals(zero))
70+
.map(trail -> trail.get(9))
71+
.distinct()
72+
.count())
73+
.sum();
74+
}
75+
76+
@Override
77+
public Integer solvePart2(final IntGrid grid) {
78+
return getTrails(grid).size();
79+
}
80+
81+
@Override
82+
@Samples({
83+
@Sample(method = "part1", input = TEST, expected = "36"),
84+
@Sample(method = "part2", input = TEST, expected = "81"),
85+
})
86+
public void samples() {
87+
}
88+
89+
public static void main(final String[] args) throws Exception {
90+
AoC2024_10.create().run();
91+
}
92+
93+
private static final String TEST = """
94+
89010123
95+
78121874
96+
87430965
97+
96549874
98+
45678903
99+
32019012
100+
01329801
101+
10456732
102+
""";
103+
}

0 commit comments

Comments
 (0)