8000 day 2 · AbdulRehman56/AdventOfCode-Java@19c2bd7 · GitHub
[go: up one dir, main page]

Skip to content
8000

Commit 19c2bd7

Browse files
committed
day 2
1 parent eb41e0c commit 19c2bd7

File tree

2 files changed

+39
-3
lines changed

2 files changed

+39
-3
lines changed

src/main/java/com/sbaars/adventofcode/network/FetchInput.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public FetchInput() {
2929
}
3030

3131
public static void main(String[] args) {
32-
new FetchInput().retrieveDay("1", "2024");
32+
new FetchInput().retrieveDay("2", "2024");
3333
}
3434

3535
private void retrieveDay(String day, String year) {

src/main/java/com/sbaars/adventofcode/year24/days/Day2.java

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22

33
import com.sbaars.adventofcode.year24.Day2024;
44

5+
import java.util.List;
6+
import java.util.stream.Collectors;
7+
import java.util.stream.IntStream;
8+
59
public class Day2 extends Day2024 {
610
public Day2() {
711
super(2);
@@ -13,11 +17,43 @@ public static void main(String[] args) {
1317

1418
@Override
1519
public Object part1() {
16-
return "";
20+
List<String> input = dayStream().collect(Collectors.toList());
21+
return input.stream().filter(this::isSafeReport).count();
1722
}
1823

1924
@Override
2025
public Object part2() {
21-
return "";
26+
List<String> input = dayStream().collect(Collectors.toList());
27+
return input.stream().filter(this::isSafeWithDampener).count();
28+
}
29+
30+
private boolean isSafeReport(String report) {
31+
String[] levels = report.split(" ");
32+
for (int i = 1; i < levels.length; i++) {
33+
int diff = Integer.parseInt(levels[i]) - Integer.parseInt(levels[i - 1]);
34+
if (Math.abs(diff) < 1 || Math.abs(diff) > 3 || (diff > 0 && i > 1 && Integer.parseInt(levels[i - 1]) < Integer.parseInt(levels[i - 2])) || (diff < 0 && i > 1 && Integer.parseInt(levels[i - 1]) > Integer.parseInt(levels[i - 2]))) {
35+
return false;
36+
}
37+
}
38+
return true;
39+
}
40+
41+
private boolean isSafeWithDampener(String report) {
42+
if (isSafeReport(report)) {
43+
return true;
44+
}
45+
String[] levels = report.split(" ");
46+
return IntStream.range(0, levels.length)
47+
.anyMatch(i -> isSafeReport(removeLevel(levels, i)));
48+
}
49+
50+
private String removeLevel(String[] levels, int index) {
51+
StringBuilder sb = new StringBuilder();
52+
for (int i = 0; i < levels.length; i++) {
53+
if (i != index) {
54+
sb.append(levels[i]).append(" ");
55+
}
56+
}
57+
return sb.toString().trim();
2258
}
2359
}

0 commit comments

Comments
 (0)
0