Skip to content

Commit c13b994

Browse files
committed
java/2016/13: add solution for part 2
1 parent a8cccd2 commit c13b994

File tree

2 files changed

+27
-28
lines changed
  • java/src
    • main/java/com/github/saser/adventofcode/year2016/day13
    • test/java/com/github/saser/adventofcode/year2016/day13

2 files changed

+27
-28
lines changed

java/src/main/java/com/github/saser/adventofcode/year2016/day13/Day13.java

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@
22

33
import java.io.BufferedReader;
44
import java.io.Reader;
5-
import java.util.HashSet;
5+
import java.util.HashMap;
66
import java.util.LinkedList;
7+
import java.util.Map;
78

89
import com.github.saser.adventofcode.Result;
910
import com.github.saser.adventofcode.geo.Point2D;
@@ -26,28 +27,35 @@ private static Result solve(Reader r, int part) {
2627
var from = new Point2D(1, 1);
2728
var target = new Point2D(31, 39);
2829
var steps = Day13.steps(from, target, favorite);
29-
return Result.ok(Integer.toString(steps));
30+
if (part == 1) {
31+
return Result.ok(Integer.toString(steps.get(target)));
32+
}
33+
var within50 = steps.values()
34+
.stream()
35+
.filter((length) -> length <= 50)
36+
.count();
37+
return Result.ok(Long.toString(within50));
3038
} catch (Exception e) {
3139
e.printStackTrace();
3240
return Result.err(e.getMessage());
3341
}
3442
}
3543

36-
private static int steps(Point2D from, Point2D target, int favorite) {
44+
private static Map<Point2D, Integer> steps(Point2D from, Point2D target, int favorite) {
3745
var queue = new LinkedList<Tuple2<Point2D, Integer>>();
3846
queue.add(new Tuple2<>(from, 0));
39-
var visited = new HashSet<Point2D>();
47+
var visited = new HashMap<Point2D, Integer>();
4048
while (!queue.isEmpty()) {
4149
var tuple = queue.remove();
4250
var point = tuple.v1;
4351
var steps = tuple.v2;
44-
if (point.equals(target)) {
45-
return steps;
46-
}
47-
if (visited.contains(point)) {
52+
if (visited.containsKey(point)) {
4853
continue;
4954
}
50-
visited.add(point);
55+
visited.put(point, steps);
56+
if (point.equals(target)) {
57+
break;
58+
}
5159
var neighbors = new Point2D[] {
5260
point.plus(new Point2D(1, 0)),
5361
point.plus(new Point2D(-1, 0)),
@@ -63,7 +71,7 @@ private static int steps(Point2D from, Point2D target, int favorite) {
6371
}
6472
}
6573
}
66-
return 0;
74+
return visited;
6775
}
6876

6977
private static boolean isWall(Point2D point, int favorite) {

java/src/test/java/com/github/saser/adventofcode/year2016/day13/Day13Test.java

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -17,22 +17,13 @@ public void part1Actual() throws IOException {
1717
}
1818
}
1919

20-
// @Test
21-
// public void part2Example() {
22-
// var input = new StringReader("");
23-
// var output = "";
24-
// var result = Day13.part2(input);
25-
// Assert.assertEquals("no error", "", result.error);
26-
// Assert.assertEquals("correct output", output, result.answer);
27-
// }
28-
29-
// @Test
30-
// public void part2Actual() throws IOException {
31-
// try (var input = new FileReader("inputs/2016/13")) {
32-
// var output = "";
33-
// var result = Day13.part2(input);
34-
// Assert.assertEquals("no error", "", result.error);
35-
// Assert.assertEquals("correct output", output, result.answer);
36-
// }
37-
// }
20+
@Test
21+
public void part2Actual() throws IOException {
22+
try (var input = new FileReader("inputs/2016/13")) {
23+
var output = "124";
24+
var result = Day13.part2(input);
25+
Assert.assertEquals("no error", "", result.error);
26+
Assert.assertEquals("correct output", output, result.answer);
27+
}
28+
}
3829
}

0 commit comments

Comments
 (0)