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); } }