{
"llm" : {
"feedback" : "# Exercise: floodfill\n\n### Correctness\n- In `DrawingApp` ist die Umschaltlogik für `up`/`down` vertauscht: bei `\"up\"` erhöhst du den Index, bei `\"down\"` verringerst du ihn; gefordert ist das Umschalten analog zur Farblogik (hoch = zurück, runter = vorwärts).\n- `WorkQueue.remove()` ruft `removeFirst()` auf einer Variable vom Typ `List<Coord>` auf; das kompiliert so nicht (die Methode existiert nur bei `LinkedList`/`Deque`), d. h. diese WorkList-Implementierung ist aktuell nicht lauffähig.\n- `WorkStack.remove()` verwendet `removeLast()` auf `ArrayList`; das gibt es bei `ArrayList` nicht (erst ab Java 21 über `SequencedCollection`, und auch dann nur, wenn dein Typ/Target passt). So wie es dasteht, ist das nicht kompatibel/kompiliert nicht in vielen üblichen Setups.\n- `Coord` hat kein `equals`/`hashCode`; dadurch kann `WorkHashSet` Koordinaten nicht als “bereits vorhanden” erkennen (Duplikate werden nicht zuverlässig unterdrückt), was das Verhalten der HashSet-Worklist fachlich verfälscht.\n- `WorkTreeSet.remove()` nutzt `pollLast()` (größtes Element), während laut Aufgabenbeschreibung die sortierte Reihenfolge über `compareTo` maßgeblich ist und typischerweise “kleinstes zuerst” entfernt wird; damit bekommst du ein anderes Füllmuster als erwartet.\n- In `IterativeFloodFill` verwendest du `IO.println(...)`; falls `IO` in eurem Projekt nicht existiert/importiert ist, kompiliert die Klasse nicht.\n\n### Suggestion\n- Überlege beim Index-Update für `\"up\"`/`\"down\"`: Welche Taste soll “zum vorherigen” und welche “zum nächsten” Algorithmus springen, wenn du es wirklich exakt wie bei `\"left\"`/`\"right\"` handhabst?\n- Wenn du bei `WorkQueue` vorne entfernen willst: Prüfe, welchen konkreten Typ du brauchst, damit “remove first” verfügbar ist (und ob dein Feld dann auch diesen Typ haben sollte).\n- Für `WorkStack`: Schau nach, wie man in Java “letztes Element entfernen” idiomatisch macht, wenn man intern eine `ArrayList` nutzt (Hinweis: Index-basiert).\n- Für `Coord` in Kombination mit `HashSet`/`TreeSet`: Stelle sicher, dass Gleichheit von Koordinaten inhaltlich (x,y) definiert ist; sonst kann ein Set nicht korrekt “du bist schon drin” entscheiden.\n- Für `TreeSet`: Entscheide dich bewusst, ob du das kleinste oder das größte Element entfernen willst, und gleiche das mit der Aufgabenbeschreibung (“in sortierter Reihenfolge entfernt”) ab.\n- Falls du Debug-Ausgaben willst: Nutze etwas, das sicher vorhanden ist (oder entferne es wieder), damit die Abgabe auch ohne Zusatzklassen baut.\n\n### Code Style\n- In `DrawingApp` sind mehrere auskommentierte Alternativen (`behaviour = ...`) und TODO-Kommentare geblieben; das macht es schwer lesbar. Besser: über die UI/Algorithmusliste auswählbar machen (wie bei den FillAlgorithms) statt per Kommentar umzuschalten.\n- `IterativeFloodFill` hat viele kommentierte “Planungsnotizen” direkt im Code; wenn es fertig ist, kürzen/entfernen oder in knappe Methodenköpfe/Javadoc umwandeln.\n- `WorkList behaviour;` in `IterativeFloodFill` sollte `private final` sein, wenn es nicht nachträglich geändert wird (klarere Immutable-Absicht).\n- `remove()`-Methoden geben teils `null` zurück; das ist fehleranfällig (NPE-Risiko). Einheitlicher ist: nur `remove()` aufrufen, wenn `!isEmpty()` gilt (und dann nie `null` liefern).\n\n\n# Exercise: flashcard\n\nLlm Evaluation ist für diese Aufgabe deaktiviert. Entferne die .llmignore Datei vom Package der Aufgabe.\n\n\n# Exercise: imagestats\n\nLlm Evaluation ist für diese Aufgabe deaktiviert. Entferne die .llmignore Datei vom Package der Aufgabe.\n",
"status" : "SUCCESS"
}
}