Skip to content

Commit 93124c5

Browse files
committed
Solved day 10 part 2
1 parent 2434789 commit 93124c5

File tree

8 files changed

+49
-31
lines changed

8 files changed

+49
-31
lines changed

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ plugins {
44

55
// project meta data
66
group 'de.havox_design.aoc2015'
7-
version '0.9.4'
7+
version '0.9.5'
88

99
// Switch to gradle "all" distribution.
1010
wrapper {

day10/src/main/java/de/havox_design/aoc2015/day10/Elves.java

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@
33
import de.havox_design.aoc2015.utils.DataReader;
44

55
import java.util.List;
6-
import java.util.regex.Matcher;
7-
import java.util.regex.Pattern;
86

97
public class Elves {
108
private final String input;
@@ -28,29 +26,30 @@ public int solvePart1() {
2826
}
2927

3028
public int solvePart2() {
31-
return 0;
29+
return processForIterations(50).length();
3230
}
3331

3432
protected String processIteration(String input) {
3533
StringBuilder newInput = new StringBuilder();
3634

3735
int i = 0;
3836
while(i < input.length()) {
39-
Pattern pattern = Pattern.compile(input.charAt(i) + "+");
40-
Matcher matcher = pattern.matcher(input.substring(i));
41-
42-
if (matcher.find()) {
43-
String group = matcher.group(0);
44-
i += matcher.group(0).length() - 1;
45-
newInput.append(matcher.group(0).length()).append(group.charAt(0));
46-
}
47-
48-
i++;
37+
i = lookAndSay(input, newInput, i);
4938
}
5039

5140
return newInput.toString();
5241
}
5342

43+
private int lookAndSay(String input, StringBuilder newInput, int from) {
44+
int i = from;
45+
while (i < input.length() && input.charAt(i) == input.charAt(from)) {
46+
++i;
47+
}
48+
newInput.append(i - from);
49+
newInput.append(input.charAt(from));
50+
return i;
51+
}
52+
5453
protected String processForIterations(int iterations) {
5554
String newInput = input;
5655

day10/src/test/java/de/havox_design/aoc2015/day10/Day10Test.java

Lines changed: 36 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,27 @@ void testPart1(String fileName, int expectedResultLength) {
2424

2525
private static Stream<Arguments> getDataForPart1() {
2626
return Stream.of(
27-
Arguments.of("part1sample1.txt", 82350),
28-
Arguments.of("part1sample2.txt", 107312)
27+
Arguments.of("sample1.txt", 82350),
28+
Arguments.of("sample2.txt", 107312),
29+
Arguments.of("sample3.txt", 139984),
30+
Arguments.of("sample4.txt", 182376),
31+
Arguments.of("sample5.txt", 237746)
32+
);
33+
}
34+
35+
@ParameterizedTest
36+
@MethodSource("getDataForPart2")
37+
void testPart2(String fileName, int expectedResultLength) {
38+
Assertions.assertEquals(expectedResultLength, Elves.solvePart2(fileName));
39+
}
40+
41+
private static Stream<Arguments> getDataForPart2() {
42+
return Stream.of(
43+
Arguments.of("sample1.txt", 1166642),
44+
Arguments.of("sample2.txt", 1520986),
45+
Arguments.of("sample3.txt", 1982710),
46+
Arguments.of("sample4.txt", 2584304),
47+
Arguments.of("sample5.txt", 3369156)
2948
);
3049
}
3150

@@ -38,21 +57,21 @@ void testProcessData(String fileName, String expectedString, int iterations) {
3857

3958
private static Stream<Arguments> getDataForProcessData() {
4059
return Stream.of(
41-
Arguments.of("part1sample1.txt", "11", 1),
42-
Arguments.of("part1sample1.txt", "21", 2),
43-
Arguments.of("part1sample1.txt", "1211", 3),
44-
Arguments.of("part1sample1.txt", "111221", 4),
45-
Arguments.of("part1sample1.txt", "312211", 5),
46-
Arguments.of("part1sample2.txt", "21", 1),
47-
Arguments.of("part1sample2.txt", "1211", 2),
48-
Arguments.of("part1sample2.txt", "111221", 3),
49-
Arguments.of("part1sample2.txt", "312211", 4),
50-
Arguments.of("part1sample3.txt", "1211", 1),
51-
Arguments.of("part1sample3.txt", "111221", 2),
52-
Arguments.of("part1sample3.txt", "312211", 3),
53-
Arguments.of("part1sample4.txt", "111221", 1),
54-
Arguments.of("part1sample4.txt", "312211", 2),
55-
Arguments.of("part1sample5.txt", "312211", 1)
60+
Arguments.of("sample1.txt", "11", 1),
61+
Arguments.of("sample1.txt", "21", 2),
62+
Arguments.of("sample1.txt", "1211", 3),
63+
Arguments.of("sample1.txt", "111221", 4),
64+
Arguments.of("sample1.txt", "312211", 5),
65+
Arguments.of("sample2.txt", "21", 1),
66+
Arguments.of("sample2.txt", "1211", 2),
67+
Arguments.of("sample2.txt", "111221", 3),
68+
Arguments.of("sample2.txt", "312211", 4),
69+
Arguments.of("sample3.txt", "1211", 1),
70+
Arguments.of("sample3.txt", "111221", 2),
71+
Arguments.of("sample3.txt", "312211", 3),
72+
Arguments.of("sample4.txt", "111221", 1),
73+
Arguments.of("sample4.txt", "312211", 2),
74+
Arguments.of("sample5.txt", "312211", 1)
5675
);
5776
}
5877
}

0 commit comments

Comments
 (0)