22
33import org .apache .commons .lang3 .StringUtils ;
44
5- import java .util .ArrayDeque ;
65import java .util .Arrays ;
7- import java .util .Deque ;
86import java .util .HashMap ;
97import java .util .List ;
108import java .util .Map ;
@@ -16,7 +14,7 @@ public class PlutonianPebbles {
1614 private Map <Long , Long > rocksPerNumber ;
1715
1816 public PlutonianPebbles (List <String > inputs ) {
19- rocksPerNumber = Arrays .stream (inputs .get ( 0 ).split (StringUtils .SPACE )).map (Long ::valueOf )
17+ rocksPerNumber = Arrays .stream (inputs .getFirst ( ).split (StringUtils .SPACE )).map (Long ::valueOf )
2018 .collect (Collectors .groupingBy (Function .identity (), Collectors .counting ()));
2119 }
2220
@@ -27,50 +25,39 @@ public long solve(int blinks) {
2725 blink ();
2826 }
2927
30- return countRocks ( );
28+ return rocksPerNumber . values (). stream (). reduce ( 0L , Long :: sum );
3129 }
3230
3331 private void blink () {
3432
3533 Map <Long ,Long > processedRocks = new HashMap <>();
3634
37- for (Long number : rocksPerNumber .keySet ()) {
35+ for (Map .Entry <Long ,Long > rock : rocksPerNumber .entrySet ()) {
36+ long number = rock .getKey ();
37+ long rockCount = rock .getValue ();
3838 long digits = String .valueOf (number ).length ();
39- long rockCount = rocksPerNumber .get (number );
40- long newNumber ;
39+
4140 if (number == 0 ) {
42- newNumber = 1L ;
43- rockCount += processedRocks .getOrDefault (newNumber , 0L );
44- processedRocks .put (1L , rockCount );
41+ updateNumber (1L , rockCount , processedRocks );
4542 } else if (digits % 2 == 0 ) {
4643 String strNumber = String .valueOf (number );
47-
44+
4845 String strNumberLeft = strNumber .substring (0 , strNumber .length () / 2 );
49- newNumber = Long .parseLong (strNumberLeft );
50- long rockCountLeft = rockCount + processedRocks .getOrDefault (newNumber , 0L );
51- processedRocks .put (newNumber , rockCountLeft );
46+ updateNumber (Long .parseLong (strNumberLeft ), rockCount , processedRocks );
5247
5348 String strNumberRight = strNumber .substring (strNumber .length () / 2 );
54- newNumber = Long .parseLong (strNumberRight );
55- long rockCountRight = rockCount + processedRocks .getOrDefault (newNumber , 0L );
56- processedRocks .put (newNumber , rockCountRight );
57-
49+ updateNumber (Long .parseLong (strNumberRight ), rockCount , processedRocks );
5850 } else {
59- newNumber = number *2024L ;
60- rockCount += processedRocks .getOrDefault (newNumber , 0L );
61- processedRocks .put (newNumber , rockCount );
51+ updateNumber (number *2024L , rockCount , processedRocks );
6252 }
6353 }
6454
6555 rocksPerNumber = processedRocks ;
6656 }
6757
68- private long countRocks () {
69- long result = 0 ;
70- for (Long number : rocksPerNumber .keySet ()) {
71- result += rocksPerNumber .get (number );
72- }
73- return result ;
58+ private void updateNumber (long number , long rockCount , Map <Long ,Long > processedRocks ) {
59+ rockCount += processedRocks .getOrDefault (number , 0L );
60+ processedRocks .put (number , rockCount );
7461 }
7562
7663}
0 commit comments