2
2
3
3
import java .io .BufferedReader ;
4
4
import java .io .Reader ;
5
- import java .util .HashSet ;
5
+ import java .util .HashMap ;
6
6
import java .util .LinkedList ;
7
+ import java .util .Map ;
7
8
8
9
import com .github .saser .adventofcode .Result ;
9
10
import com .github .saser .adventofcode .geo .Point2D ;
@@ -26,28 +27,35 @@ private static Result solve(Reader r, int part) {
26
27
var from = new Point2D (1 , 1 );
27
28
var target = new Point2D (31 , 39 );
28
29
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 ));
30
38
} catch (Exception e ) {
31
39
e .printStackTrace ();
32
40
return Result .err (e .getMessage ());
33
41
}
34
42
}
35
43
36
- private static int steps (Point2D from , Point2D target , int favorite ) {
44
+ private static Map < Point2D , Integer > steps (Point2D from , Point2D target , int favorite ) {
37
45
var queue = new LinkedList <Tuple2 <Point2D , Integer >>();
38
46
queue .add (new Tuple2 <>(from , 0 ));
39
- var visited = new HashSet <Point2D >();
47
+ var visited = new HashMap <Point2D , Integer >();
40
48
while (!queue .isEmpty ()) {
41
49
var tuple = queue .remove ();
42
50
var point = tuple .v1 ;
43
51
var steps = tuple .v2 ;
44
- if (point .equals (target )) {
45
- return steps ;
46
- }
47
- if (visited .contains (point )) {
52
+ if (visited .containsKey (point )) {
48
53
continue ;
49
54
}
50
- visited .add (point );
55
+ visited .put (point , steps );
56
+ if (point .equals (target )) {
57
+ break ;
58
+ }
51
59
var neighbors = new Point2D [] {
52
60
point .plus (new Point2D (1 , 0 )),
53
61
point .plus (new Point2D (-1 , 0 )),
@@ -63,7 +71,7 @@ private static int steps(Point2D from, Point2D target, int favorite) {
63
71
}
64
72
}
65
73
}
66
- return 0 ;
74
+ return visited ;
67
75
}
68
76
69
77
private static boolean isWall (Point2D point , int favorite ) {
0 commit comments