Skip to content

Commit bad17cf

Browse files
committed
refactor: refactor day 3
1 parent 644e6bb commit bad17cf

File tree

5 files changed

+24
-84
lines changed

5 files changed

+24
-84
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
- [Day 1 - Historian Hysteria](https://github.com/Flashky/advent-of-code-2024/tree/master/src/main/java/com/adventofcode/flashk/day01)
77
- [Day 2 - Red-Nosed Reports](https://github.com/Flashky/advent-of-code-2024/tree/master/src/main/java/com/adventofcode/flashk/day02)
8-
- [Day 3](https://github.com/Flashky/advent-of-code-2024/tree/master/src/main/java/com/adventofcode/flashk/day03)
8+
- [Day 3 - Mull It Over](https://github.com/Flashky/advent-of-code-2024/tree/master/src/main/java/com/adventofcode/flashk/day03)
99
- [Day 4](https://github.com/Flashky/advent-of-code-2024/tree/master/src/main/java/com/adventofcode/flashk/day04)
1010
- [Day 5](https://github.com/Flashky/advent-of-code-2024/tree/master/src/main/java/com/adventofcode/flashk/day05)
1111
- [Day 6](https://github.com/Flashky/advent-of-code-2024/tree/master/src/main/java/com/adventofcode/flashk/day06)

src/main/java/com/adventofcode/flashk/day03/MullItOver.java

Lines changed: 12 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -5,71 +5,43 @@
55
import java.util.List;
66
import java.util.regex.Matcher;
77
import java.util.regex.Pattern;
8-
import java.util.stream.Collectors;
98

109
public class MullItOver {
1110

12-
// [0-9][0-9]?[0-9]?,[0-9][0-9]?[0-9]?
13-
private static final Pattern PATTERN = Pattern.compile("(mul\\([0-9][0-9]?[0-9]?,[0-9][0-9]?[0-9]?\\))");
11+
private static final Pattern MULTIPLY_PATTERN = Pattern.compile("(mul\\([0-9][0-9]?[0-9]?,[0-9][0-9]?[0-9]?\\))");
1412
private static final Pattern OPERATORS_PATTERN = Pattern.compile("([0-9][0-9]?[0-9]?),([0-9][0-9]?[0-9]?)");
1513
private static final Pattern IGNORE_MULTIPLICATIONS = Pattern.compile("don't\\(\\).*?do\\(\\)");
14+
private static final String DONT = "don't()";
1615

17-
private List<String> inputs;
16+
private final List<String> inputs;
1817

1918
public MullItOver(List<String> inputs) {
2019
this.inputs = inputs;
2120
}
2221

23-
public long solveA() {
22+
public long solve(boolean cleanMemory) {
2423

25-
long result = 0;
26-
for(String input : inputs) {
27-
Matcher matcher = PATTERN.matcher(input);
28-
29-
while(matcher.find()){
30-
result += multiply(matcher.group());
31-
}
32-
}
24+
// The input is just a single word, even when the input is a list of lines.
25+
String input = String.join(StringUtils.EMPTY, inputs);
26+
String memory = cleanMemory ? clean(input) : input;
3327

34-
return result;
35-
}
36-
37-
public long solveB() {
3828
long result = 0;
29+
Matcher matcher = MULTIPLY_PATTERN.matcher(memory);
3930

40-
String complete = String.join("", inputs);
41-
String cleanedInput = removeMultiplications(complete);
42-
Matcher matcher = PATTERN.matcher(cleanedInput);
4331
while(matcher.find()){
4432
result += multiply(matcher.group());
4533
}
4634

47-
4835
return result;
4936
}
5037

51-
private String removeMultiplications(String input) {
52-
53-
String modifiedInput = IGNORE_MULTIPLICATIONS.matcher(input).replaceAll("");
54-
55-
if(!modifiedInput.contains("don't()")) {
56-
return modifiedInput;
57-
}
58-
59-
return modifiedInput.substring(0, modifiedInput.indexOf("don't()"));
60-
38+
private String clean(String input) {
39+
String modifiedInput = IGNORE_MULTIPLICATIONS.matcher(input).replaceAll(StringUtils.EMPTY);
40+
return modifiedInput.contains(DONT) ? modifiedInput.substring(0, modifiedInput.indexOf(DONT)) : modifiedInput;
6141
}
6242

6343
private long multiply(String operation) {
6444
Matcher matcher = OPERATORS_PATTERN.matcher(operation);
65-
66-
long op1;
67-
long op2;
68-
if(matcher.find()){
69-
op1 = Long.parseLong(matcher.group(1));
70-
op2 = Long.parseLong(matcher.group(2));
71-
return op1 * op2;
72-
}
73-
return 0;
45+
return matcher.find() ? Long.parseLong(matcher.group(1)) * Long.parseLong(matcher.group(2)) : 0;
7446
}
7547
}

src/test/java/com/adventofcode/flashk/common/test/constants/TestFilename.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ private TestFilename() {}
77
// Common filenames used by all tests
88
public final static String INPUT_FILE = "data.input";
99
public final static String INPUT_FILE_SAMPLE = "sample.input";
10+
public final static String INPUT_FILE_SAMPLE_PART_2 = "sample_part_2.input";
1011
public final static String INPUT_FILE_SINGLE_SAMPLE = "single_sample.input";
1112

1213
// Other tests

src/test/java/com/adventofcode/flashk/day03/Day03Test.java

Lines changed: 9 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,12 @@
1616
import com.adventofcode.flashk.common.test.utils.PuzzleTest;
1717
import com.adventofcode.flashk.common.test.utils.Input;
1818

19+
import static com.adventofcode.flashk.common.test.constants.TestFilename.INPUT_FILE_SAMPLE_PART_2;
1920
import static org.junit.jupiter.api.Assertions.assertEquals;
2021

2122
@DisplayName(TestDisplayName.DAY_03)
2223
@TestMethodOrder(OrderAnnotation.class)
23-
public class Day03Test extends PuzzleTest {
24+
class Day03Test extends PuzzleTest {
2425

2526
private static final String INPUT_FOLDER = TestFolder.DAY_03;
2627

@@ -38,7 +39,7 @@ public void testSolvePart1Sample() {
3839

3940
MullItOver mullItOver = new MullItOver(inputs);
4041

41-
assertEquals(161, mullItOver.solveA());
42+
assertEquals(161, mullItOver.solve(false));
4243
}
4344

4445
@Test
@@ -54,44 +55,10 @@ public void testSolvePart1Input() {
5455
List<String> inputs = Input.readStringLines(INPUT_FOLDER, TestFilename.INPUT_FILE);
5556
MullItOver mullItOver = new MullItOver(inputs);
5657

57-
assertEquals(160672468, mullItOver.solveA());
58+
assertEquals(160672468, mullItOver.solve(false));
5859

5960
}
6061

61-
@Test
62-
@Order(2)
63-
@Tag(TestTag.PART_ONE)
64-
@Tag(TestTag.INPUT)
65-
@DisplayName(TestDisplayName.PART_ONE_DEBUG)
66-
public void testSolvePart1InputByLines() {
67-
68-
System.out.print("1 | input | ");
69-
70-
// Read input file
71-
List<String> inputs = Input.readStringLines(INPUT_FOLDER, TestFilename.INPUT_FILE);
72-
73-
74-
MullItOver mullItOver = new MullItOver(List.of(inputs.get(0)));
75-
76-
assertEquals(30243322, mullItOver.solveA());
77-
78-
mullItOver = new MullItOver(List.of(inputs.get(1)));
79-
assertEquals(29041171, mullItOver.solveA());
80-
81-
mullItOver = new MullItOver(List.of(inputs.get(2)));
82-
assertEquals(22674551, mullItOver.solveA());
83-
84-
mullItOver = new MullItOver(List.of(inputs.get(3)));
85-
assertEquals(26491961, mullItOver.solveA());
86-
87-
mullItOver = new MullItOver(List.of(inputs.get(4)));
88-
assertEquals(24532437, mullItOver.solveA());
89-
90-
mullItOver = new MullItOver(List.of(inputs.get(5)));
91-
assertEquals(27689026, mullItOver.solveA());
92-
93-
94-
}
9562

9663
@Test
9764
@Order(2)
@@ -108,7 +75,7 @@ void testSolvePart2InputByLines() {
10875

10976
MullItOver mullItOver = new MullItOver(List.of(inputs.get(0)));
11077

111-
assertEquals(26546863, mullItOver.solveB());
78+
assertEquals(26546863, mullItOver.solve(true));
11279

11380
}
11481

@@ -122,10 +89,10 @@ public void testSolvePart2Sample() {
12289
System.out.print("2 | sample | ");
12390

12491
// Read input file
125-
List<String> inputs = Input.readStringLines(INPUT_FOLDER, TestFilename.INPUT_FILE_SAMPLE);
126-
MullItOver mullItOver = new MullItOver(List.of("xmul(2,4)&mul[3,7]!^don't()_mul(5,5)+mul(32,64](mul(11,8)undo()?mul(8,5))"));
92+
List<String> inputs = Input.readStringLines(INPUT_FOLDER, INPUT_FILE_SAMPLE_PART_2);
93+
MullItOver mullItOver = new MullItOver(inputs);
12794

128-
assertEquals(48, mullItOver.solveB());
95+
assertEquals(48, mullItOver.solve(true));
12996
}
13097

13198
@Test
@@ -141,7 +108,7 @@ public void testSolvePart2Input() {
141108
List<String> inputs = Input.readStringLines(INPUT_FOLDER, TestFilename.INPUT_FILE);
142109
MullItOver mullItOver = new MullItOver(inputs);
143110

144-
assertEquals(84893551, mullItOver.solveB());
111+
assertEquals(84893551, mullItOver.solve(true));
145112

146113
}
147114

src/test/resources/inputs

0 commit comments

Comments
 (0)