Skip to content

Commit 8dd464a

Browse files
committed
refactor: reduce duplication on day 11
1 parent 8244698 commit 8dd464a

File tree

1 file changed

+14
-27
lines changed

1 file changed

+14
-27
lines changed

src/main/java/com/adventofcode/flashk/day11/PlutonianPebbles.java

Lines changed: 14 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,7 @@
22

33
import org.apache.commons.lang3.StringUtils;
44

5-
import java.util.ArrayDeque;
65
import java.util.Arrays;
7-
import java.util.Deque;
86
import java.util.HashMap;
97
import java.util.List;
108
import 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

Comments
 (0)