Skip to content

Commit 5b928d4

Browse files
committed
java/2016/17: add solution for part 2
1 parent 1d256a8 commit 5b928d4

File tree

2 files changed

+52
-22
lines changed
  • java/src
    • main/java/com/github/saser/adventofcode/year2016/day17
    • test/java/com/github/saser/adventofcode/year2016/day17

2 files changed

+52
-22
lines changed

java/src/main/java/com/github/saser/adventofcode/year2016/day17/Day17.java

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,14 @@ private static Result solve(Reader r, int part) {
2424
try {
2525
var passcode = new BufferedReader(r).readLine();
2626
var maze = new Maze(passcode);
27-
var path = maze.findVault(new Point2D(3, 3));
28-
return Result.ok(path);
27+
var paths = maze.findVault(new Point2D(3, 3));
28+
String answer;
29+
if (part == 1) {
30+
answer = paths.v1;
31+
} else {
32+
answer = Integer.toString(paths.v2.length());
33+
}
34+
return Result.ok(answer);
2935
} catch (Exception e) {
3036
e.printStackTrace();
3137
return Result.err(e.getMessage());
@@ -41,15 +47,21 @@ public Maze(String passcode) throws Exception {
4147
this.md = MessageDigest.getInstance("MD5");
4248
}
4349

44-
public String findVault(Point2D target) {
50+
public Tuple2<String, String> findVault(Point2D target) {
4551
var queue = new LinkedList<Tuple2<Point2D, String>>();
4652
queue.add(new Tuple2<>(new Point2D(0, 0), ""));
53+
var shortestPath = "";
54+
var longestPath = "";
4755
while (!queue.isEmpty()) {
4856
var tuple = queue.remove();
4957
var point = tuple.v1;
5058
var path = tuple.v2;
5159
if (point.equals(target)) {
52-
return path;
60+
if (shortestPath.equals("")) {
61+
shortestPath = path;
62+
}
63+
longestPath = path;
64+
continue;
5365
}
5466
for (var nextStep : this.nextSteps(path)) {
5567
var delta = new Point2D(0, 0);
@@ -74,7 +86,7 @@ public String findVault(Point2D target) {
7486
queue.add(new Tuple2<>(nextPoint, path + nextStep));
7587
}
7688
}
77-
throw new Error("unreachable");
89+
return new Tuple2<>(shortestPath, longestPath);
7890
}
7991

8092
private Set<Character> nextSteps(String path) {

java/src/test/java/com/github/saser/adventofcode/year2016/day17/Day17Test.java

Lines changed: 35 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -45,22 +45,40 @@ public void part1Actual() throws IOException {
4545
}
4646
}
4747

48-
// @Test
49-
// public void part2Example() {
50-
// var input = new StringReader("");
51-
// var output = "";
52-
// var result = Day17.part2(input);
53-
// Assert.assertEquals("no error", "", result.error);
54-
// Assert.assertEquals("correct output", output, result.answer);
55-
// }
48+
@Test
49+
public void part2Example1() {
50+
var input = new StringReader("ihgpwlah");
51+
var output = "370";
52+
var result = Day17.part2(input);
53+
Assert.assertEquals("no error", "", result.error);
54+
Assert.assertEquals("correct output", output, result.answer);
55+
}
56+
57+
@Test
58+
public void part2Example2() {
59+
var input = new StringReader("kglvqrro");
60+
var output = "492";
61+
var result = Day17.part2(input);
62+
Assert.assertEquals("no error", "", result.error);
63+
Assert.assertEquals("correct output", output, result.answer);
64+
}
5665

57-
// @Test
58-
// public void part2Actual() throws IOException {
59-
// try (var input = new FileReader("inputs/2016/17")) {
60-
// var output = "";
61-
// var result = Day17.part2(input);
62-
// Assert.assertEquals("no error", "", result.error);
63-
// Assert.assertEquals("correct output", output, result.answer);
64-
// }
65-
// }
66+
@Test
67+
public void part2Example3() {
68+
var input = new StringReader("ulqzkmiv");
69+
var output = "830";
70+
var result = Day17.part2(input);
71+
Assert.assertEquals("no error", "", result.error);
72+
Assert.assertEquals("correct output", output, result.answer);
73+
}
74+
75+
@Test
76+
public void part2Actual() throws IOException {
77+
try (var input = new FileReader("inputs/2016/17")) {
78+
var output = "556";
79+
var result = Day17.part2(input);
80+
Assert.assertEquals("no error", "", result.error);
81+
Assert.assertEquals("correct output", output, result.answer);
82+
}
83+
}
6684
}

0 commit comments

Comments
 (0)