44import org .slf4j .Logger ;
55import org .slf4j .LoggerFactory ;
66
7- import java .math .BigInteger ;
8- import java .sql .Array ;
97import java .util .ArrayList ;
8+ import java .util .HashMap ;
109import java .util .List ;
10+ import java .util .Map ;
1111import java .util .regex .Matcher ;
1212import java .util .regex .Pattern ;
1313
@@ -33,7 +33,7 @@ public long solvePart1() {
3333 if (matcher .matches ()) {
3434 Integer a = Integer .valueOf (matcher .group (1 ));
3535 Integer b = Integer .valueOf (matcher .group (2 ));
36- LOGGER .info ("Reading: {} and {}" , a , b );
36+ LOGGER .info ("Reading: {} and {}" , a , b );
3737 left .add (a );
3838 right .add (b );
3939 } else {
@@ -42,11 +42,31 @@ public long solvePart1() {
4242 }
4343
4444 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 );
4646 }
4747
4848 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+ }
4967
50- return 0 ;
68+ return left .keySet ().stream ().
69+ map ((k ) -> k * left .get (k ) * right .getOrDefault (k , 0L ))
70+ .reduce (0L , Long ::sum );
5171 }
5272}
0 commit comments