faecher:informatik:oberstufe:java:aoc:aco2023:day19:start

Tag 19 - Aplenty

  • Speichere jeden Workflow in einer Hashmap von <String, Workflow>. Nutze für jeden Workflow (jede Zeile) eine eigene Klasse.
  • Der Key (String) ist dabei der vorderste String des Workflows vor den geschweiften Klammern.
  • Die Klasse Workflow speichert eine ArrayList von String-Arrays. Jede einzelne Regel wird in ihre 4 Bestandteile zerlegt (x/m/a/s, größer/kleiner, Vergleichswert und Folgezustand). Diese 4 Bestandteile werden in einem String-Array gespeichert. Da die Buchstaben x/m/a/s immer in dieser Reihenfolge bei den Parts (letzte Zeilen des Inputs) erscheinen, ist es äußerst sinnvoll, diese direkt durch die Indizes 0, 1, 2 und 3 zu ersetzen. Der letzte Zeil des Workflows (der sonst-Fall) kann separat als String gespeichert werden.
  • Außerdem benötigt die Klasse Workflow noch eine Methode calculate(int[] in), welche ein int[]-Array als Parameter entgegennimmt (dazu gleich), und den Nachfolge-Zustand zurückgibt: Überprüfe für jede einzelne Regel im Workflow, ob ein Vergleich true ergibt, dann gib den Nachfolge-Zustand zurück.
  • In der Hauptmethode müssen nach den Workflows noch die Teile/Parts eingelesen werden. Speichere jeweils die 4 Zahlenwerte direkt in einem int[]-Array der Größe 4 hab und stecke alle Arrays in eine ArrayList<int[]>.
  • Prüfe nun für jeden Part in einer Endlosschleife immer wieder was der Nachfolge-Workflow ist. Sobald der Workflow "A" oder "R" ist, kannst du mit break die Schleife abbrechen.

Lösungsvorschlag Klasse Workflow

Lösungsvorschlag Teil 1

  • Gehe rückwärts vor: suche alle A(accepted) in den Workflows/Regeln und gehe von dort aus die Regeln rückwärts durch, bis du bei der Regel "in" gelandet bist. Merke dir auf dem Weg dahin alle größer/kleiner-Vergleiche. Setze anhand dieser Vergleiche die Maximums- und Minimumsgrenzen, um die erlaubte Differenz pro x/m/a/s zu bilden.

Lösungsvorschlag Teil 2

  • faecher/informatik/oberstufe/java/aoc/aco2023/day19/start.txt
  • Zuletzt geändert: 22.12.2023 23:26
  • von Marco Kuemmel