Skip to content

Commit 8244698

Browse files
committed
refactor: use same algorithm for day 11 parts 1 and 2
1 parent f8d185b commit 8244698

File tree

2 files changed

+16
-77
lines changed

2 files changed

+16
-77
lines changed

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

Lines changed: 8 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -13,32 +13,24 @@
1313

1414
public class PlutonianPebbles {
1515

16-
private Deque<Long> rocks;
17-
1816
private Map<Long, Long> rocksPerNumber;
1917

2018
public PlutonianPebbles(List<String> inputs) {
21-
rocks = Arrays.stream(inputs.get(0).split(StringUtils.SPACE)).map(Long::valueOf).collect(Collectors.toCollection(ArrayDeque::new));
22-
23-
rocksPerNumber = rocks.stream().collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
19+
rocksPerNumber = Arrays.stream(inputs.get(0).split(StringUtils.SPACE)).map(Long::valueOf)
20+
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
2421
}
2522

26-
public long solveA(int blinks) {
27-
for(int i = 0; i < blinks; i++) {
28-
blink();
29-
}
3023

31-
return rocks.size();
32-
}
24+
public long solve(int blinks) {
3325

34-
public long solveB(int blinks) {
3526
for(int i = 0; i < blinks; i++) {
36-
blinkB();
27+
blink();
3728
}
38-
return countRocksInMap();
29+
30+
return countRocks();
3931
}
4032

41-
private void blinkB() {
33+
private void blink() {
4234

4335
Map<Long,Long> processedRocks = new HashMap<>();
4436

@@ -73,40 +65,12 @@ private void blinkB() {
7365
rocksPerNumber = processedRocks;
7466
}
7567

76-
private long countRocksInMap() {
68+
private long countRocks() {
7769
long result = 0;
7870
for(Long number : rocksPerNumber.keySet()) {
7971
result += rocksPerNumber.get(number);
8072
}
8173
return result;
8274
}
8375

84-
private void blink() {
85-
86-
Deque<Long> processedRocks = new ArrayDeque<>();
87-
88-
// Para cada roca:
89-
// Si roca == 0 -> roca = 1
90-
// y si roca tiene un número par de dígitos -> Partir en 2 -> tendré que convertir a string y partir.
91-
// resto de casos: roca *= 2024
92-
93-
while(!rocks.isEmpty()) {
94-
long number = rocks.pollFirst();
95-
long digits = String.valueOf(number).length();
96-
if(number == 0) {
97-
processedRocks.add(1L);
98-
} else if(digits % 2 == 0) {
99-
String strNumber = String.valueOf(number);
100-
String numberLeft = strNumber.substring(0, strNumber.length() / 2);
101-
String numberRight = strNumber.substring(strNumber.length() / 2);
102-
processedRocks.add(Long.valueOf(numberLeft));
103-
processedRocks.add(Long.valueOf(numberRight));
104-
} else {
105-
processedRocks.add(number*2024);
106-
}
107-
}
108-
109-
110-
rocks = processedRocks;
111-
}
11276
}

src/test/java/com/adventofcode/flashk/day11/Day11Test.java

Lines changed: 8 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import java.util.List;
44

5-
import org.junit.jupiter.api.Disabled;
65
import org.junit.jupiter.api.DisplayName;
76
import org.junit.jupiter.api.MethodOrderer.OrderAnnotation;
87
import org.junit.jupiter.api.Order;
@@ -14,15 +13,13 @@
1413
import com.adventofcode.flashk.common.test.constants.TestFilename;
1514
import com.adventofcode.flashk.common.test.constants.TestFolder;
1615
import com.adventofcode.flashk.common.test.constants.TestTag;
17-
import com.adventofcode.flashk.common.test.utils.PuzzleTest;
1816
import com.adventofcode.flashk.common.test.utils.Input;
1917

2018
import static org.junit.jupiter.api.Assertions.assertEquals;
2119

2220
@DisplayName(TestDisplayName.DAY_11)
2321
@TestMethodOrder(OrderAnnotation.class)
24-
@Disabled // TODO Remove comment when implemented
25-
public class Day11Test extends PuzzleTest {
22+
class Day11Test {
2623

2724
private static final String INPUT_FOLDER = TestFolder.DAY_11;
2825

@@ -31,17 +28,16 @@ public class Day11Test extends PuzzleTest {
3128
@Tag(TestTag.PART_1)
3229
@Tag(TestTag.SAMPLE)
3330
@DisplayName(TestDisplayName.PART_1_SAMPLE)
34-
public void testSolvePart1Sample() {
31+
void part1SampleTest() {
3532

3633
// Read input file
3734
List<String> inputs = Input.readStringLines(INPUT_FOLDER, TestFilename.INPUT_FILE_SAMPLE);
3835

3936
PlutonianPebbles plutonianPebbles = new PlutonianPebbles(inputs);
40-
41-
assertEquals(22L ,plutonianPebbles.solveA(6));
37+
assertEquals(22L ,plutonianPebbles.solve(6));
4238

4339
plutonianPebbles = new PlutonianPebbles(inputs);
44-
assertEquals(55312L ,plutonianPebbles.solveA(25));
40+
assertEquals(55312L ,plutonianPebbles.solve(25));
4541

4642
}
4743

@@ -50,33 +46,13 @@ public void testSolvePart1Sample() {
5046
@Tag(TestTag.PART_1)
5147
@Tag(TestTag.INPUT)
5248
@DisplayName(TestDisplayName.PART_1_INPUT)
53-
public void testSolvePart1Input() {
49+
void part1InputTest() {
5450

5551
// Read input file
5652
List<String> inputs = Input.readStringLines(INPUT_FOLDER, TestFilename.INPUT_FILE);
57-
PlutonianPebbles plutonianPebbles = new PlutonianPebbles(inputs);
58-
59-
System.out.println("Solution: "+plutonianPebbles.solveA(75));
60-
//assertEquals(189547L,0L);
61-
62-
}
63-
64-
@Test
65-
@Order(1)
66-
@Tag(TestTag.PART_1)
67-
@Tag(TestTag.SAMPLE)
68-
@DisplayName(TestDisplayName.PART_2_SAMPLE)
69-
public void testSolvePart2Sample() {
70-
71-
// Read input file
72-
List<String> inputs = Input.readStringLines(INPUT_FOLDER, TestFilename.INPUT_FILE_SAMPLE);
7353

7454
PlutonianPebbles plutonianPebbles = new PlutonianPebbles(inputs);
75-
76-
assertEquals(22L ,plutonianPebbles.solveB(6));
77-
78-
plutonianPebbles = new PlutonianPebbles(inputs);
79-
assertEquals(55312L ,plutonianPebbles.solveB(25));
55+
assertEquals(189547L,plutonianPebbles.solve(25));
8056

8157
}
8258

@@ -85,14 +61,13 @@ public void testSolvePart2Sample() {
8561
@Tag(TestTag.PART_2)
8662
@Tag(TestTag.INPUT)
8763
@DisplayName(TestDisplayName.PART_2_INPUT)
88-
public void testSolvePart2Input() {
64+
void part2InputTest() {
8965

9066
// Read input file
9167
List<String> inputs = Input.readStringLines(INPUT_FOLDER, TestFilename.INPUT_FILE);
9268

9369
PlutonianPebbles plutonianPebbles = new PlutonianPebbles(inputs);
94-
95-
assertEquals(224577979481346L, plutonianPebbles.solveB(75));
70+
assertEquals(224577979481346L, plutonianPebbles.solve(75));
9671

9772
}
9873

0 commit comments

Comments
 (0)