4
4
import org .slf4j .Logger ;
5
5
import org .slf4j .LoggerFactory ;
6
6
7
- import java .math .BigInteger ;
8
- import java .sql .Array ;
9
7
import java .util .ArrayList ;
8
+ import java .util .HashMap ;
10
9
import java .util .List ;
10
+ import java .util .Map ;
11
11
import java .util .regex .Matcher ;
12
12
import java .util .regex .Pattern ;
13
13
@@ -33,7 +33,7 @@ public long solvePart1() {
33
33
if (matcher .matches ()) {
34
34
Integer a = Integer .valueOf (matcher .group (1 ));
35
35
Integer b = Integer .valueOf (matcher .group (2 ));
36
- LOGGER .info ("Reading: {} and {}" , a , b );
36
+ LOGGER .info ("Reading: {} and {}" , a , b );
37
37
left .add (a );
38
38
right .add (b );
39
39
} else {
@@ -42,11 +42,31 @@ public long solvePart1() {
42
42
}
43
43
44
44
return Streams .zip (left .stream ().sorted (), right .stream ().sorted (),
45
- (a , b ) -> Math .abs (a - b )).reduce (0 , ( a , b ) -> a + b );
45
+ (a , b ) -> Math .abs (a - b )).reduce (0 , Integer :: sum );
46
46
}
47
47
48
48
public long solvePart2 () {
49
+ Pattern p = Pattern .compile ("(\\ d+)\\ s+(\\ d+)" );
50
+
51
+ Map <Long , Long > left = new HashMap <>(input .size ());
52
+ Map <Long , Long > right = new HashMap <>(input .size ());
53
+
54
+ for (String s : input ) {
55
+ Matcher matcher = p .matcher (s );
56
+ if (matcher .matches ()) {
57
+ Long a = Long .valueOf (matcher .group (1 ));
58
+ Long b = Long .valueOf (matcher .group (2 ));
59
+ LOGGER .info ("Reading: {} and {}" , a , b );
60
+ left .compute (a , (k , v ) -> (v == null ) ? 1 : v + 1 );
61
+ right .compute (b , (k , v ) -> (v == null ) ? 1 : v + 1 );
62
+ } else {
63
+ throw new IllegalArgumentException ("Invalid input: " + s );
64
+ }
65
+
66
+ }
49
67
50
- return 0 ;
68
+ return left .keySet ().stream ().
69
+ map ((k ) -> k * left .get (k ) * right .getOrDefault (k , 0L ))
70
+ .reduce (0L , Long ::sum );
51
71
}
52
72
}
0 commit comments