Skip to content

Commit e6341a6

Browse files
committed
Solved day 10 part 1
1 parent cc41c88 commit e6341a6

File tree

4 files changed

+116
-3
lines changed

4 files changed

+116
-3
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.2'
7+
version '0.9.3'
88

99
// Switch to gradle "all" distribution.
1010
wrapper {
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package de.havox_design.aoc2015.day10;
2+
3+
import de.havox_design.aoc2015.utils.DataReader;
4+
5+
import java.util.List;
6+
import java.util.regex.Matcher;
7+
import java.util.regex.Pattern;
8+
9+
public class Elves {
10+
private final String input;
11+
12+
public Elves(String fileName) {
13+
input = readData(fileName).get(0);
14+
}
15+
16+
public static int solvePart1(String fileName) {
17+
Elves instance = new Elves(fileName);
18+
return instance.solvePart1();
19+
}
20+
21+
public static int solvePart2(String fileName) {
22+
Elves instance = new Elves(fileName);
23+
return instance.solvePart2();
24+
}
25+
26+
public int solvePart1() {
27+
return processForIterations(40).length();
28+
}
29+
30+
public int solvePart2() {
31+
return 0;
32+
}
33+
34+
protected String processIteration(String input) {
35+
StringBuilder newInput = new StringBuilder();
36+
37+
int i = 0;
38+
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++;
49+
}
50+
51+
return newInput.toString();
52+
}
53+
54+
protected String processForIterations(int iterations) {
55+
String newInput = input;
56+
57+
for(int i = 0; i < iterations; i++) {
58+
newInput = processIteration(newInput);
59+
}
60+
61+
return newInput;
62+
}
63+
64+
private List<String> readData(String fileName) {
65+
return DataReader.readData(fileName, MainClass.class);
66+
}
67+
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ public class MainClass {
66
private static final Logger LOGGER = Logger.getLogger(MainClass.class.getName());
77

88
public static void main(String[] args) {
9-
LOGGER.info("Solution 1: 13");
10-
LOGGER.info("Solution 2: 23");
9+
LOGGER.info(() -> "Solution 1: " + Elves.solvePart1("day10.txt"));
10+
LOGGER.info(() -> "Solution 2: " + Elves.solvePart2("day10.txt"));
1111
}
1212
}

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

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
package de.havox_design.aoc2015.day10;
22

3+
import org.junit.jupiter.api.Assertions;
34
import org.junit.jupiter.api.Test;
5+
import org.junit.jupiter.params.ParameterizedTest;
6+
import org.junit.jupiter.params.provider.Arguments;
7+
import org.junit.jupiter.params.provider.MethodSource;
8+
9+
import java.util.stream.Stream;
410

511
class Day10Test {
612

@@ -9,4 +15,44 @@ class Day10Test {
915
void testMainClass() {
1016
MainClass.main(new String[0]);
1117
}
18+
19+
@ParameterizedTest
20+
@MethodSource("getDataForPart1")
21+
void testPart1(String fileName, int expectedResultLength) {
22+
Assertions.assertEquals(expectedResultLength, Elves.solvePart1(fileName));
23+
}
24+
25+
private static Stream<Arguments> getDataForPart1() {
26+
return Stream.of(
27+
Arguments.of("part1sample1.txt", 82350),
28+
Arguments.of("part1sample2.txt", 107312)
29+
);
30+
}
31+
32+
@ParameterizedTest
33+
@MethodSource("getDataForProcessData")
34+
void testProcessData(String fileName, String expectedString, int iterations) {
35+
Elves instanceUnderTest = new Elves(fileName);
36+
Assertions.assertEquals(expectedString, instanceUnderTest.processForIterations(iterations));
37+
}
38+
39+
private static Stream<Arguments> getDataForProcessData() {
40+
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)
56+
);
57+
}
1258
}

0 commit comments

Comments
 (0)