129 lines
6.9 KiB
Java
129 lines
6.9 KiB
Java
import java.io.File;
|
|
import java.io.FileNotFoundException;
|
|
import java.util.Scanner;
|
|
|
|
public class Ex1 {
|
|
public static void main(String[] args) {
|
|
File file = new File("input.txt");
|
|
String line = null;
|
|
long count = 0;
|
|
try (Scanner scanner = new Scanner(file)) {
|
|
while (scanner.hasNextLine()) {
|
|
line = scanner.nextLine();
|
|
}
|
|
} catch (FileNotFoundException e) {
|
|
System.err.println("File not found: " + e.getMessage());
|
|
}
|
|
String[] ranges = line.split(",");
|
|
for (String range : ranges) {
|
|
System.out.println("Processing range: " + range);
|
|
String[] bounds = range.split("-");
|
|
// Case 1: bounds same size and odd length
|
|
if (bounds[0].length() == bounds[1].length() && bounds[0].length() % 2 == 1)
|
|
continue;
|
|
// Case 2: bounds same size and even length
|
|
else if (bounds[0].length() == bounds[1].length() && bounds[0].length() % 2 == 0) {
|
|
// split each in half, iterate first half of first bound to first half of second bound as longs; get other halves too
|
|
long start = Long.parseLong(bounds[0].substring(0, bounds[0].length() / 2));
|
|
long end = Long.parseLong(bounds[1].substring(0, bounds[1].length() / 2));
|
|
long startLow = Long.parseLong(bounds[0].substring(bounds[0].length() / 2));
|
|
long endLow = Long.parseLong(bounds[1].substring(bounds[1].length() / 2));
|
|
for (long i = start; i <= end; i++) {
|
|
|
|
if (start == end) { // you little prick.
|
|
if (i >= startLow && i <= endLow) {
|
|
System.out.println("Adding: " + String.valueOf(i) + String.valueOf(i));
|
|
count += Long.parseLong(String.valueOf(i) + String.valueOf(i));
|
|
}
|
|
|
|
} else if (i == start) {
|
|
if (i >= startLow) {
|
|
System.out.println("Adding: " + String.valueOf(i) + String.valueOf(i));
|
|
count += Long.parseLong(String.valueOf(i) + String.valueOf(i));
|
|
}
|
|
} else if (i == end) {
|
|
if (i <= endLow) {
|
|
System.out.println("Adding: " + String.valueOf(i) + String.valueOf(i));
|
|
count += Long.parseLong(String.valueOf(i) + String.valueOf(i));
|
|
}
|
|
} else {
|
|
System.out.println("Adding: " + String.valueOf(i) + String.valueOf(i));
|
|
count += Long.parseLong(String.valueOf(i) + String.valueOf(i));
|
|
}
|
|
}
|
|
}
|
|
// Case 3: bounds different sizes
|
|
else {
|
|
// Case 3a: first odd, second even
|
|
if (bounds[0].length() % 2 == 1 && bounds[1].length() % 2 == 0) {
|
|
long startNum = (long) Math.pow(10, bounds[1].length() - 1);
|
|
long startHigh = Long.parseLong(String.valueOf(startNum).substring(0, bounds[1].length() / 2));
|
|
long endHigh = Long.parseLong(bounds[1].substring(0, bounds[1].length() / 2));
|
|
long startLow = 0;
|
|
long endLow = Long.parseLong(bounds[1].substring(bounds[1].length() / 2));
|
|
|
|
for (long i = startHigh; i <= endHigh; i++) {
|
|
|
|
if (startHigh == endHigh) {
|
|
if (i >= startLow && i <= endLow) {
|
|
System.out.println("Adding: " + String.valueOf(i) + String.valueOf(i));
|
|
count += Long.parseLong(String.valueOf(i) + String.valueOf(i));
|
|
}
|
|
}
|
|
|
|
else if (i == startHigh) {
|
|
if (i >= startLow) {
|
|
System.out.println("Adding: " + String.valueOf(i) + String.valueOf(i));
|
|
count += Long.parseLong(String.valueOf(i) + String.valueOf(i));
|
|
}
|
|
} else if (i == endHigh) {
|
|
if (i <= endLow) {
|
|
System.out.println("Adding: " + String.valueOf(i) + String.valueOf(i));
|
|
count += Long.parseLong(String.valueOf(i) + String.valueOf(i));
|
|
}
|
|
} else {
|
|
System.out.println("Adding: " + String.valueOf(i) + String.valueOf(i));
|
|
count += Long.parseLong(String.valueOf(i) + String.valueOf(i));
|
|
}
|
|
}
|
|
}
|
|
|
|
//Case 3b: first even, second odd
|
|
else if (bounds[0].length() % 2 == 0 && bounds[1].length() % 2 == 1) {
|
|
// here endnum should be highest number with same length as bound0 p.e. 1200-15000 -> endnum = 9999
|
|
long endNum = (long) Math.pow(10, bounds[1].length() - 1) - 1;
|
|
long startHigh = Long.parseLong(bounds[0].substring(0, bounds[0].length() / 2));
|
|
long endHigh = Long.parseLong(String.valueOf(endNum).substring(0, bounds[0].length() / 2));
|
|
long startLow = Long.parseLong(bounds[0].substring(bounds[0].length() / 2));
|
|
long endLow = Long.parseLong(String.valueOf(endNum).substring(bounds[0].length() / 2));
|
|
|
|
for (long i = startHigh; i <= endHigh; i++) {
|
|
|
|
if (startHigh == endHigh) {
|
|
if (i >= startLow && i <= endLow) {
|
|
System.out.println("Adding: " + String.valueOf(i) + String.valueOf(i));
|
|
count += Long.parseLong(String.valueOf(i) + String.valueOf(i));
|
|
}
|
|
}
|
|
|
|
else if (i == startHigh) {
|
|
if (i >= startLow) {
|
|
System.out.println("Adding: " + String.valueOf(i) + String.valueOf(i));
|
|
count += Long.parseLong(String.valueOf(i) + String.valueOf(i));
|
|
}
|
|
} else if (i == endHigh) {
|
|
if (i <= endLow) {
|
|
System.out.println("Adding: " + String.valueOf(i) + String.valueOf(i));
|
|
count += Long.parseLong(String.valueOf(i) + String.valueOf(i));
|
|
}
|
|
} else {
|
|
System.out.println("Adding: " + String.valueOf(i) + String.valueOf(i));
|
|
count += Long.parseLong(String.valueOf(i) + String.valueOf(i));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
System.out.println("Count: " + count);
|
|
}
|
|
} |