Skip to content

Commit 644e6bb

Browse files
committed
feat: solve day 3 part 2
1 parent 4d75341 commit 644e6bb

File tree

2 files changed

+66
-45
lines changed

2 files changed

+66
-45
lines changed

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

Lines changed: 10 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import java.util.List;
66
import java.util.regex.Matcher;
77
import java.util.regex.Pattern;
8+
import java.util.stream.Collectors;
89

910
public class MullItOver {
1011

@@ -35,55 +36,28 @@ public long solveA() {
3536

3637
public long solveB() {
3738
long result = 0;
38-
for(String input : inputs) {
39-
40-
String cleanedInput = removeMultiplications(input);
4139

42-
Matcher matcher = PATTERN.matcher(cleanedInput);
43-
44-
while(matcher.find()){
45-
result += multiply(matcher.group());
46-
}
40+
String complete = String.join("", inputs);
41+
String cleanedInput = removeMultiplications(complete);
42+
Matcher matcher = PATTERN.matcher(cleanedInput);
43+
while(matcher.find()){
44+
result += multiply(matcher.group());
4745
}
4846

47+
4948
return result;
5049
}
5150

5251
private String removeMultiplications(String input) {
5352

54-
String modifiedInput = input;
55-
56-
Matcher matcher = IGNORE_MULTIPLICATIONS.matcher(modifiedInput);
57-
if(matcher.find()) {
58-
modifiedInput = modifiedInput.replaceAll("don't\\(\\).*?do\\(\\)", "");
59-
}
53+
String modifiedInput = IGNORE_MULTIPLICATIONS.matcher(input).replaceAll("");
6054

6155
if(!modifiedInput.contains("don't()")) {
6256
return modifiedInput;
6357
}
6458

6559
return modifiedInput.substring(0, modifiedInput.indexOf("don't()"));
6660

67-
/*
68-
while(modifiedInput.contains("don't()")) {
69-
//int startRemoveIndex = modifiedInput.indexOf("don't()");
70-
//int endRemoveIndex = modifiedInput.indexOf("do()") + "do()".length();
71-
72-
// Ojo:
73-
// Y si tienes...: don't() ... do() ... do() ... don't() ?
74-
75-
Matcher matcher = IGNORE_MULTIPLICATIONS.matcher(modifiedInput);
76-
if(matcher.find()) {
77-
modifiedInput = modifiedInput.replaceAll("don't\\(\\).*?do\\(\\)", "");
78-
} else {
79-
modifiedInput = modifiedInput.replaceAll("don't\\(\\)", "");
80-
}
81-
82-
// Y si tienes un don't() sin cerrar?
83-
//modifiedInput = modifiedInput.substring(0, startRemoveIndex) + modifiedInput.substring(endRemoveIndex, modifiedInput.length());
84-
}
85-
86-
return modifiedInput;*/
8761
}
8862

8963
private long multiply(String operation) {
@@ -92,8 +66,8 @@ private long multiply(String operation) {
9266
long op1;
9367
long op2;
9468
if(matcher.find()){
95-
op1 = Long.valueOf(matcher.group(1));
96-
op2 = Long.valueOf(matcher.group(2));
69+
op1 = Long.parseLong(matcher.group(1));
70+
op2 = Long.parseLong(matcher.group(2));
9771
return op1 * op2;
9872
}
9973
return 0;

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

Lines changed: 56 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,60 @@ public void testSolvePart1Input() {
5757
assertEquals(160672468, mullItOver.solveA());
5858

5959
}
60+
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+
}
95+
96+
@Test
97+
@Order(2)
98+
@Tag(TestTag.PART_TWO)
99+
@Tag(TestTag.INPUT)
100+
@DisplayName(TestDisplayName.PART_TWO_DEBUG)
101+
void testSolvePart2InputByLines() {
102+
103+
System.out.print("1 | input | ");
104+
105+
// Read input file
106+
List<String> inputs = Input.readStringLines(INPUT_FOLDER, TestFilename.INPUT_FILE);
107+
108+
109+
MullItOver mullItOver = new MullItOver(List.of(inputs.get(0)));
110+
111+
assertEquals(26546863, mullItOver.solveB());
112+
113+
}
60114

61115
@Test
62116
@Order(3)
@@ -87,16 +141,9 @@ public void testSolvePart2Input() {
87141
List<String> inputs = Input.readStringLines(INPUT_FOLDER, TestFilename.INPUT_FILE);
88142
MullItOver mullItOver = new MullItOver(inputs);
89143

90-
System.out.println("Sol: "+mullItOver.solveB());
91-
92-
// Incorrectas:
93-
// 49347471
94-
// 112946746 -> Too high
95-
// 112946746
96-
// 93733733 -> Too high
97-
98-
//assertEquals(160672468, mullItOver.solveB());
144+
assertEquals(84893551, mullItOver.solveB());
99145

100146
}
101147

148+
102149
}

0 commit comments

Comments
 (0)