-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDay10a.java
50 lines (41 loc) · 1.21 KB
/
Day10a.java
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
/* Using DFS for practice */
import com.horstmann.adventofcode.*;
CharGrid grid;
long sum1 = 0;
long sum2 = 0;
void parse(Path p) throws IOException {
grid = CharGrid.parse(p);
sum1 = 0;
sum2 = 0;
}
Set<Location> neighbors(Location loc) {
return grid.mainNeighbors(loc).stream().filter(n -> grid.get(n) == grid.get(loc) + 1).collect(Collectors.toSet());
}
Object part1() {
var zeroes = grid.locations().filter(l -> grid.get(l) == '0').toList();
for (var start : zeroes) {
var nines = new HashSet<Location>();
Graphs.bfs(start, this::neighbors, (l, _) -> {
if (grid.get(l) == '9') {
if (nines.add(l)) sum1++;
sum2++;
return false;
} else return true;
});
}
return sum1;
}
Object part2() {
return sum2;
}
void main() throws IOException {
Util.time(() -> {
parse(Util.inputPath("a"));
IO.println(part1());
IO.println(part2());
Files.writeString(Path.of("/tmp/foo.dot"), Graphs.dot(grid.findFirst('0'), this::neighbors, (_, _) -> null));
parse(Util.inputPath("z"));
IO.println(part1());
IO.println(part2());
});
}