====== Day 4: Camp Cleanup ====== ===== Aufgabe und Input ===== * {{ :faecher:informatik:oberstufe:java:aoc:aoc2022:day4:problem.png?linkonly |Aufgabe}} * {{ :faecher:informatik:oberstufe:java:aoc:aoc2022:day4:input.zip |Input}} (d4e - Beispieleingabe aus dem Aufgabentext, d4i Eingabe für die Lösungen auf dieser Wikiseite) ===== Ergebnisse ===== ++++ Ergebnis Teil 1 für die Eingabe auf dieser Wikiseite (weicht ab von deiner "echten" Lösung) | 466 ++++ ++++ Ergebnis Teil 2 für die Eingabe auf dieser Wikiseite (weicht ab von deiner "echten" Lösung) | 865 ++++ ===== Tipps und Hinweise ===== ++++ Methodengerüst Basis | public day4() throws Exception { // Einlesen am Komma getrennt, wir erhalten zwei Felder. // line[0] - erster Bereich // line[1] - zweiter Bereich this.readInput(inputFile,','); this.printInput(); } public int partOne() { int answer=0; for(String[] line: input) { // Bereiche trennen String[] bereich1 = line[0].split("-"); String[] bereich2 = line[1].split("-"); // Kontrollausgabe System.out.println("[Bereich 1] " + bereich1[0] + " bis " + bereich1[1]); System.out.println("[Bereich 2] " + bereich2[0] + " bis " + bereich2[1]); // Grenzen mit "sprechenden Namen" bezeichnen int start1 = Integer.parseInt(bereich1[0]); int start2 = Integer.parseInt(bereich2[0]); int end1 = Integer.parseInt(bereich1[1]); int end2 = Integer.parseInt(bereich2[1]); boolean overlapping=false; // Hier müssen Bedingungen (if ...) eingefügt werden, die // überprüfen, ob sich die Bereiche überlappen. // Wenn ja, setzt mal overlapping = true // dann werden die Bereiche anschließend als überlappend // zur Antwort addiert if (overlapping) { answer++; } } System.out.println(answer); return answer; } ++++ ++++ Methodengerüst mit Beispielbedingung | public day4() throws Exception { // Einlesen am Komma getrennt, wir erhalten zwei Felder. // line[0] - erster Bereich // line[1] - zweiter Bereich this.readInput(inputFile,','); this.printInput(); } public int partOne() { int answer=0; for(String[] line: input) { // Bereiche trennen String[] bereich1 = line[0].split("-"); String[] bereich2 = line[1].split("-"); // Kontrollausgabe System.out.println("[Bereich 1] " + bereich1[0] + " bis " + bereich1[1]); System.out.println("[Bereich 2] " + bereich2[0] + " bis " + bereich2[1]); // Grenzen mit "sprechenden Namen" bezeichnen int start1 = Integer.parseInt(bereich1[0]); int start2 = Integer.parseInt(bereich2[0]); int end1 = Integer.parseInt(bereich1[1]); int end2 = Integer.parseInt(bereich2[1]); boolean overlapping=false; // Erste Bedingung if (start1 < start2 && start2 <= end1) { // Bereich 2 kann in Bereich 1 enthalten sein, ist es aber nur dann // wenn end2 <= end1 ist if (end2 <= end1) { System.out.println("Bereich 2 ist in Bereich 1 enthalten"); overlapping=true; } } // Hier müssen weitere Bedingungen (if ...) eingefügt werden, die // andere Möglichkeiten überprüfen, wie sich die Bereiche überlappen // können. if (overlapping) { answer++; } } System.out.println(answer); return answer; } ++++