Skip to content

Commit 98c2b75

Browse files
committed
java/2016/09: add solution for part 2
1 parent 6f5b3b8 commit 98c2b75

File tree

2 files changed

+8
-5
lines changed
  • java/src
    • main/java/com/github/saser/adventofcode/year2016/day09
    • test/java/com/github/saser/adventofcode/year2016/day09

2 files changed

+8
-5
lines changed

java/src/main/java/com/github/saser/adventofcode/year2016/day09/Day09.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,16 @@ private static Result solve(Reader r, int part) {
1818
try {
1919
var br = new BufferedReader(r);
2020
var input = br.readLine();
21-
return Result.ok(Long.toString(decompressedLength(input)));
21+
var length = decompressedLength(input, part == 2);
22+
return Result.ok(Long.toString(length));
2223
} catch (Exception e) {
2324
e.printStackTrace();
2425
return Result.err(e.getMessage());
2526
}
2627
}
2728

28-
private static long decompressedLength(String s) {
29-
var length = 0;
29+
private static long decompressedLength(String s, boolean recursive) {
30+
var length = 0L;
3031
for (var i = 0; i < s.length(); i++) {
3132
var markerStart = s.indexOf('(', i);
3233
if (markerStart == -1) {
@@ -38,7 +39,9 @@ private static long decompressedLength(String s) {
3839
var marker = parseMarker(s.substring(markerStart + 1, markerEnd));
3940
var dataStart = markerEnd + 1;
4041
var dataEnd = markerEnd + marker[0];
41-
length += (dataEnd - dataStart + 1) * marker[1];
42+
var data = s.substring(dataStart, dataEnd + 1);
43+
var dataLength = recursive ? decompressedLength(data, recursive) : data.length();
44+
length += dataLength * marker[1];
4245
i = dataEnd;
4346
}
4447
return length;

java/src/test/java/com/github/saser/adventofcode/year2016/day09/Day09Test.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ public void part2Example4() {
111111
@Test
112112
public void part2Actual() throws IOException {
113113
try (var input = new FileReader("inputs/2016/09")) {
114-
var output = "";
114+
var output = "11451628995";
115115
var result = Day09.part2(input);
116116
Assert.assertEquals("no error", "", result.error);
117117
Assert.assertEquals("correct output", output, result.answer);

0 commit comments

Comments
 (0)