package src; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.List; public class Problem2 { public static void main(String[] args) { String filePath = "inputs/inputProblem2.txt"; try { String input = readFileAsString(filePath); List ranges = parseRanges(input); long tally = solve(ranges); System.out.println("Sum of invalid IDs: " + tally); } catch (IOException e) { e.printStackTrace(); } } // Solve by generating only repeated IDs public static long solve(List ranges) { long sum = 0; for (long[] range : ranges) { long start = range[0]; long end = range[1]; for (long num = start; num <= end; num++) { String numStr = String.valueOf(num); int len = numStr.length(); if (len % 2 != 0) continue; boolean repeated = false; for (int prefixLen = 1; prefixLen <= len / 2; prefixLen++) { if (len % prefixLen != 0) continue; // must divide evenly String prefix = numStr.substring(0, prefixLen); String repeatedNum = prefix + prefix; if (repeatedNum.equals(numStr)) { repeated = true; break; } } if (repeated) sum += num; } } return sum; } public static String readFileAsString(String filePath) throws IOException { StringBuilder sb = new StringBuilder(); try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) { String line; while ((line = reader.readLine()) != null) { sb.append(line.trim()); } } return sb.toString(); } public static List parseRanges(String input) { List result = new ArrayList<>(); String[] ranges = input.split(","); for (String range : ranges) { String[] parts = range.trim().split("-"); if (parts.length != 2) { throw new IllegalArgumentException("Invalid range: " + range); } long start = Long.parseLong(parts[0]); long end = Long.parseLong(parts[1]); result.add(new long[]{start, end}); } return result; } }