Compare commits
3 Commits
d5d903aa10
...
c87b3ce367
| Author | SHA1 | Date | |
|---|---|---|---|
| c87b3ce367 | |||
| 33da6eb1b0 | |||
| c4b24c9d31 |
1
inputs/inputProblem2.txt
Normal file
1
inputs/inputProblem2.txt
Normal file
@@ -0,0 +1 @@
|
||||
9191906840-9191941337,7671-13230,2669677096-2669816099,2-12,229599-392092,48403409-48523311,96763-229430,1919163519-1919240770,74928-96389,638049-668065,34781-73835,736781-819688,831765539-831907263,5615884-5749554,14101091-14196519,7134383-7169141,413340-625418,849755289-849920418,7745350-7815119,16717-26267,4396832-4549887,87161544-87241541,4747436629-4747494891,335-549,867623-929630,53-77,1414-3089,940604-1043283,3444659-3500714,3629-7368,79-129,5488908-5597446,97922755-98097602,182-281,8336644992-8336729448,24-47,613-1077
|
||||
@@ -1,3 +1,5 @@
|
||||
package src;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.FileReader;
|
||||
import java.util.ArrayList;
|
||||
@@ -1,3 +1,5 @@
|
||||
package src;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.FileReader;
|
||||
import java.util.ArrayList;
|
||||
85
src/Problem2.java
Normal file
85
src/Problem2.java
Normal file
@@ -0,0 +1,85 @@
|
||||
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<long[]> 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<long[]> 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<long[]> parseRanges(String input) {
|
||||
List<long[]> 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;
|
||||
}
|
||||
}
|
||||
87
src/Problem2b.java
Normal file
87
src/Problem2b.java
Normal file
@@ -0,0 +1,87 @@
|
||||
package src;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.FileReader;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class Problem2b {
|
||||
|
||||
public static void main(String[] args) {
|
||||
String filePath = "inputs/inputProblem2.txt";
|
||||
|
||||
try {
|
||||
String input = readFileAsString(filePath);
|
||||
List<long[]> ranges = parseRanges(input);
|
||||
long tally = solve(ranges);
|
||||
System.out.println("Sum of invalid IDs: " + tally);
|
||||
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
public static long solve(List<long[]> 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();
|
||||
|
||||
boolean repeated = false;
|
||||
|
||||
for (int prefixLen = 1; prefixLen <= len / 2; prefixLen++) {
|
||||
if (len % prefixLen != 0) continue;
|
||||
|
||||
String prefix = numStr.substring(0, prefixLen);
|
||||
int times = len / prefixLen;
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (int t = 0; t < times; t++) {
|
||||
sb.append(prefix);
|
||||
}
|
||||
|
||||
if (sb.toString().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<long[]> parseRanges(String input) {
|
||||
List<long[]> 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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user