11package com .adventofcode .flashk .day01 ;
22
33import java .util .ArrayList ;
4- import java .util .HashMap ;
54import java .util .List ;
65import java .util .Map ;
6+ import java .util .function .Function ;
7+ import java .util .stream .Collectors ;
8+
79
810public class HistorianHysteria {
911
10- private List <Long > left = new ArrayList <>();
11- private List <Long > right = new ArrayList <>();
12+ private final List <Long > left = new ArrayList <>();
13+ private final List <Long > right = new ArrayList <>();
1214
1315 public HistorianHysteria (List <String > input ) {
1416 for (String line : input ) {
15- String [] split = line .split (" " );
17+ String [] split = line .split (" {3} " );
1618 left .add (Long .valueOf (split [0 ]));
1719 right .add (Long .valueOf (split [1 ]));
1820 }
@@ -22,7 +24,7 @@ public Long solveA() {
2224 List <Long > leftSorted = left .stream ().sorted ().toList ();
2325 List <Long > rightSorted = right .stream ().sorted ().toList ();
2426
25- Long result = 0L ;
27+ long result = 0L ;
2628
2729 for (int i = 0 ; i < leftSorted .size (); i ++) {
2830 result += Math .abs (leftSorted .get (i )-rightSorted .get (i ));
@@ -33,30 +35,16 @@ public Long solveA() {
3335
3436 public Long solveB () {
3537
36- Long result = 0L ;
37- Map <Long ,Long > numberOccurrences = new HashMap <>();
38-
39- for (Long number : left ) {
40- Long occurrences = 0L ;
41- if (numberOccurrences .containsKey (number )) {
42- occurrences = numberOccurrences .get (number );
43- result += number * numberOccurrences .get (number );
44- } else {
38+ long result = 0L ;
4539
46- for (Long numberRight : right ) {
47- if (number .equals (numberRight )) {
48- occurrences ++;
49- }
50- }
51-
52- numberOccurrences .put (number , occurrences );
53- }
54- result += number * occurrences ;
40+ Map <Long ,Long > occurrences = right .stream ()
41+ .collect (Collectors .groupingBy (Function .identity (), Collectors .counting ()));
5542
43+ for (long number : left ) {
44+ result += number * occurrences .getOrDefault (number ,0L );
5645 }
5746
5847 return result ;
5948 }
6049
61-
6250}
0 commit comments