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

Day 9: Disk Fragmenter

Der erste Teil ist ziemlich einfach und gleichzeitig eine wunderbare Übung zum Umgang mit Arrays bzw. ArrayLists und Schleifen! Teil zwei ist hingegen einiges kniffliger und unübersichtlicher zu programmieren.

Wichtige Java-Befehle:

  • ArrayList<Integer> disk = new ArrayList();: Zum Erstellen der ArrayList, um darin alle Werte der Disk zu speichern.
  • disk.size(): Um die Länge der ArrayList zu ermitteln. Äquivalent zu arrayName.length bei Arrays.
  • for (char c: inputLines.get(0).toCharArray()){…}: Zum Iterieren über jeden einzelnen char vom Input
  • int number = (int)(c-'0');: Alle Zahlen des Inputs sind als char gespeichert. Ein direktes Type-Casting von char in int ((int)c) würde dazu führen, dass man den ASCII-Wert der Zahl präsentiert bekommt. Im Fall von '4' z. B. 52! Wenn man nun zusätzlich immer noch den ASCII-Wert des chars '0' (=ASCII 48) abzieht, dann bekommt man die eigentlich Zahl präsentiert: $52-48=4$
  • disk.get(p): Um den Wert am Index p zu erhalten.
  • disk.add(a): Um einen Wert a hinten an die ArrayList/Disk anzufügen.
  • disk.set(a, b): Um den Wert an der Position a auf b zu setzen. b ersetzt also den vorherigen Wert an Position a.

Vorgehensweise:

Lösungsvorschlag

Teil 2 ist insgesamt knifflig zu programmieren, da man (zumindest bei der hier gewählten Vorgehensweise) sowohl Buch halten muss über die aktuell vorhandenen Leerstellen, als auch ganze Zahlenblöcke betrachten muss. Die Vorgehensweise lässt sich nicht sinnvoll beschreiben und auch im Code nur schwer nachvollziehen. Der Vollständigkeit halber ist der Code hier trotzdem präsentiert.

Lösungsvorschlag

  • faecher/informatik/oberstufe/java/aoc/aoc2024/day09/start.txt
  • Zuletzt geändert: 09.12.2024 17:57
  • von Marco Kuemmel