1
0
Files
Advent-of-Code/2019/src/main/java/be/vandewalleh/aoc/Day04.java
T
2021-12-01 19:32:38 +01:00

81 lines
2.1 KiB
Java

package be.vandewalleh.aoc;
import be.vandewalleh.aoc.utils.factory.Days;
import be.vandewalleh.aoc.utils.input.Day;
import be.vandewalleh.aoc.utils.input.Text;
import java.util.Arrays;
import java.util.stream.IntStream;
import java.util.stream.Stream;
@Day(4)
public class Day04 {
public static void main(String[] args) {
var day = Days.createDay(Day04.class);
System.out.println(day.part1());
System.out.println(day.part2());
}
private final int min;
private final int max;
public Day04(@Text String input) {
var spl = input.split("-", 2);
min = Integer.parseInt(spl[0]);
max = Integer.parseInt(spl[1]);
}
private boolean isNotDecreasing(int[] ints) {
for (int i = 0; i < 5; i++) {
int a = ints[i], b = ints[i + 1];
if (b < a) return false;
}
return true;
}
private boolean hasPair(int[] ints) {
for (int i = 0; i < 5; i++) {
int a = ints[i], b = ints[i + 1];
if (a == b) return true;
}
return false;
}
private boolean hasGroup(int[] ints) {
var occurrences = new int[10];
for (int i = 0; i < 5; i++) {
int a = ints[i], b = ints[i + 1];
if (a == b) occurrences[a]++;
}
return Arrays.stream(occurrences).anyMatch(e -> e == 1);
}
private Stream<int[]> intStream() {
return IntStream.rangeClosed(min, max)
.mapToObj(String::valueOf)
.map(String::toCharArray)
.map(e -> {
var ints = new int[6];
for (int i = 0; i < 6; i++) {
ints[i] = Integer.parseInt(String.valueOf(e[i]));
}
return ints;
});
}
private long part1() {
return intStream()
.filter(this::isNotDecreasing)
.filter(this::hasPair)
.count();
}
private long part2() {
return intStream()
.filter(this::isNotDecreasing)
.filter(this::hasGroup)
.count();
}
}