1
0
This commit is contained in:
2025-12-06 20:53:04 +01:00
parent 423f2ceb60
commit 75f251397c
5 changed files with 136 additions and 0 deletions

View File

@@ -0,0 +1,122 @@
package de.advent_of_code_2025.two;
import de.advent_of_code_2025.util.InputMangler;
import de.advent_of_code_2025.util.InputReader;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.LongStream;
public class Main {
private static final record IdRange(Long start, Long end) {
public long sumDoubleSequence() {
return LongStream.range(start, end + 1).filter(IdRange::isDoubleSequence).sum();
}
public long sumAnySequence() {
return LongStream.range(start, end + 1).filter(IdRange::isAnySequence).sum();
}
private static boolean isAnySequence(long n) {
if(n < 10) {
return false;
}
final List<Long> digits = getDigits(n).reversed();
final String nString = String.valueOf(n);
if(allDigitsSame(nString, digits)) {
return true;
}
for(int i = 2; i < 6; i++) {
if(hasSequence(nString, digits, i)) {
return true;
}
}
return false;
}
private static final boolean allDigitsSame(String nString, List<Long> digits) {
return String.valueOf(digits.getFirst()).repeat(digits.size()).equals(nString);
}
private static final boolean hasSequence(String nString, List<Long> digits, int sequenceLength) {
if(sequenceLength >= digits.size()) {
return false;
}
return digits.subList(0, sequenceLength).stream().map(String::valueOf).collect(Collectors.joining()).repeat(digits.size() / sequenceLength).equals(nString);
}
private static boolean isDoubleSequence(long n) {
if(n < 10) {
return false;
}
final List<Long> digits = getDigits(n);
if(digits.size() % 2 > 0) { // odd digit numbers not relevant
return false;
}
List<Long> half = digits.subList(0, digits.size() / 2);
return digits.subList(digits.size() / 2, digits.size()).equals(half);
}
private static final List<Long> getDigits(long n) {
final List<Long> digits = new ArrayList<>();
long lastDigit = n % 10;
digits.add(lastDigit);
n = n / 10;
while (n > 0) {
lastDigit = n % 10;
digits.add(lastDigit);
n = n / 10;
}
return digits;
}
}
public static void main(String[] args) throws Throwable {
final String line = InputReader.readSingle(args);
final List<String> lines = InputMangler.mangleSingle(line, ",");
final List<IdRange> idRanges = setupRanges(lines);
long sameDigitSum = 0;
long anySequenceSum = 0;
// Part 1
for (IdRange range : idRanges) {
sameDigitSum += range.sumDoubleSequence();
}
System.out.println(sameDigitSum);
// Part 2
for (IdRange range : idRanges) {
anySequenceSum += range.sumAnySequence();
}
System.out.println(anySequenceSum);
}
private static final List<IdRange> setupRanges(List<String> lines) {
return lines.stream().map(line -> {
final String[] split = line.split("-");
return new IdRange(Long.parseLong(split[0]), Long.parseLong(split[1]));
}).collect(Collectors.toList());
}
}

View File

@@ -1,6 +1,7 @@
package de.advent_of_code_2025.util; package de.advent_of_code_2025.util;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.function.Predicate; import java.util.function.Predicate;
@@ -27,4 +28,10 @@ public class InputMangler {
return retVal; return retVal;
} }
public static final List<String> mangleSingle(String input, String mangleString) {
final List<String> retVal = new ArrayList<>();
return Arrays.asList(input.split(mangleString));
}
} }

View File

@@ -10,4 +10,9 @@ public class InputReader {
final String fileName = args[0]; final String fileName = args[0];
return Files.readAllLines(Paths.get(fileName)); return Files.readAllLines(Paths.get(fileName));
} }
public static final String readSingle(String[] args) throws IOException {
final String fileName = args[0];
return Files.readAllLines(Paths.get(fileName)).get(0);
}
} }

View File

@@ -0,0 +1 @@
199617-254904,7682367-7856444,17408-29412,963327-1033194,938910234-938964425,3207382-3304990,41-84,61624-105999,1767652-1918117,492-749,85-138,140-312,2134671254-2134761843,2-23,3173-5046,16114461-16235585,3333262094-3333392446,779370-814446,26-40,322284296-322362264,6841-12127,290497-323377,33360-53373,823429-900127,17753097-17904108,841813413-841862326,518858-577234,654979-674741,773-1229,2981707238-2981748769,383534-468118,587535-654644,1531-2363

View File

@@ -0,0 +1 @@
11-22,95-115,998-1012,1188511880-1188511890,222220-222224,1698522-1698528,446443-446449,38593856-38593862,565653-565659,824824821-824824827,2121212118-2121212124