From 33da6eb1b0ea6643c1770f42d1b719ebecf57c8d Mon Sep 17 00:00:00 2001 From: KeshavAnandCode Date: Tue, 2 Dec 2025 22:50:02 -0600 Subject: [PATCH] solved 2 --- src/Problem2.java | 53 ++++++++++++++++++++++++++++++++++++----------- 1 file changed, 41 insertions(+), 12 deletions(-) diff --git a/src/Problem2.java b/src/Problem2.java index e493346..7141fb5 100644 --- a/src/Problem2.java +++ b/src/Problem2.java @@ -13,44 +13,73 @@ public class Problem2 { try { String input = readFileAsString(filePath); - List numbers = parseRanges(input); - - for (Long num : numbers) { - System.out.println(num); - } + 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()); // remove extra spaces/newlines + sb.append(line.trim()); } } return sb.toString(); } - public static List parseRanges(String input) { - List result = new ArrayList<>(); + public static List parseRanges(String input) { + List result = new ArrayList<>(); String[] ranges = input.split(","); for (String range : ranges) { - String[] parts = range.split("-"); + 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(start); - result.add(end); + result.add(new long[]{start, end}); } return result; } - } \ No newline at end of file