Skip to content

Commit ff45b1b

Browse files
committed
java/2016/18: add solution for part 1
1 parent 27e27ad commit ff45b1b

File tree

2 files changed

+43
-2
lines changed
  • java/src
    • main/java/com/github/saser/adventofcode/year2016/day18
    • test/java/com/github/saser/adventofcode/year2016/day18

2 files changed

+43
-2
lines changed

java/src/main/java/com/github/saser/adventofcode/year2016/day18/Day18.java

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package com.github.saser.adventofcode.year2016.day18;
22

3+
import java.io.BufferedReader;
34
import java.io.Reader;
5+
import java.util.stream.Stream;
46

57
import com.github.saser.adventofcode.Result;
68

@@ -14,6 +16,45 @@ public static Result part2(Reader r) {
1416
}
1517

1618
private static Result solve(Reader r, int part) {
17-
return Result.err("not implemented yet");
19+
var state = Day18.parse(r);
20+
var states = Stream.iterate(state, Day18::next);
21+
var sum = states
22+
.limit(40)
23+
.mapToInt(Day18::count)
24+
.sum();
25+
return Result.ok(Integer.toString(sum));
26+
}
27+
28+
private static boolean[] parse(Reader r) {
29+
var line = new BufferedReader(r)
30+
.lines()
31+
.findFirst()
32+
.get()
33+
.toCharArray();
34+
var state = new boolean[line.length];
35+
for (var i = 0; i < state.length; i++) {
36+
state[i] = line[i] == '^';
37+
}
38+
return state;
39+
}
40+
41+
private static int count(boolean[] state) {
42+
var count = 0;
43+
for (var trap : state) {
44+
if (!trap) {
45+
count++;
46+
}
47+
}
48+
return count;
49+
}
50+
51+
private static boolean[] next(boolean[] state) {
52+
var next = new boolean[state.length];
53+
for (var i = 0; i < state.length; i++) {
54+
var left = i != 0 && state[i - 1];
55+
var right = i != state.length - 1 && state[i + 1];
56+
next[i] = !right == left;
57+
}
58+
return next;
1859
}
1960
}

java/src/test/java/com/github/saser/adventofcode/year2016/day18/Day18Test.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ public class Day18Test {
1010
@Test
1111
public void part1Actual() throws IOException {
1212
try (var input = new FileReader("inputs/2016/18")) {
13-
var output = "";
13+
var output = "2016";
1414
var result = Day18.part1(input);
1515
Assert.assertEquals("no error", "", result.error);
1616
Assert.assertEquals("correct output", output, result.answer);

0 commit comments

Comments
 (0)