faecher:informatik:oberstufe:java:aoc:aoc2024:day05:start

Day 5: Print Queue

Teil 1 ist vom Verständnis noch recht gut zu begreifen, beim Programmieren muss man aber trotzdem bereits etwas um die Ecke denken. Bei Teil 2 muss man dann erst recht einen Kniff erkennen, um sich das Leben einfacher zu machen. Daher zählt der Tag zur mittleren Schwierigkeit.

Tipps zur Vorgehensweise:

  • Speichere alle Rules in einer ArrayList<int[]>. Wandle also jede Rule in ein zweistelliges Array um.
  • Speichere alle Updates in einer ArrayList<int[]>. Wandle also jedes Update ebenso in ein Array um (so lang, wie es jeweils nötig ist).
  • Prüfe dann für jedes Update, ob eine Rule dabei ist, die nicht zum aktuellen Update passt.
    • Überprüfe dazu pro Rule am besten, an welchem Index innerhalb des Updates die erste Zahl der Rule ist und an welchem Index die zweite Zahl ist.
    • Wenn anschließend der Index der ersten Zahl größer ist als der Index der zweiten Zahl, dann muss das Update falsch sein.

Lösungsvorschlag

Teil 2 beginnt zunächst identisch zu Teil 1. Ebenso werden zwei ArrayLists angelegt, die alle Rules und alle Updates enthalten. Und ebenso wird dann jedes Update durchsucht, ob man ein inkorrektes Update gefunden hat. Wenn man ein solches gefunden hat, dann wird es aber knifflig.

  • Man muss nun (zumindest gedanklich) eine Sortierung des inkorrekten Updates vornehmen, sodass alle Zahlen in der Sortierung vorliegen, wie sie sich nach den Regeln ergibt. Eine tatsächliche Sortierung vorzunehmen wäre aber unheimlich komplex zu programmieren. Tatsächlich geht es einfacher!
  • Anstatt die Updates tatsächlich zu sortieren suchen wir uns zunächst einmal nur diejenigen Regeln heraus, deren linke UND rechte Zahl im aktuellen Update vorkommt.
  • Anschließend zählen wir für jede Zahl des Updates, wie häufig diese auf der linken und rechten Seite jeder relevanten Regel vorkommt. Diejenige Zahl, die in der Sortierung in der Mitte sein muss, die muss genauso häufig rechts von einer anderen Zahl wie auch links von einer anderen Zahl stehen. Wir suchen also diejenige Zahl, wo die linke und rechte Häufigkeit innerhalb der Regeln identisch ist.

Lösungsvorschlag

  • faecher/informatik/oberstufe/java/aoc/aoc2024/day05/start.txt
  • Zuletzt geändert: 05.12.2024 12:09
  • von Marco Kuemmel