Skip to content

Commit 2b71d10

Browse files
committed
refactor: refactor day 1
1 parent de22659 commit 2b71d10

File tree

2 files changed

+13
-25
lines changed

2 files changed

+13
-25
lines changed
Lines changed: 12 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,20 @@
11
package com.adventofcode.flashk.day01;
22

33
import java.util.ArrayList;
4-
import java.util.HashMap;
54
import java.util.List;
65
import java.util.Map;
6+
import java.util.function.Function;
7+
import java.util.stream.Collectors;
8+
79

810
public 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
}

src/test/resources/inputs

0 commit comments

Comments
 (0)