{
"llm" : {
"feedback" : "# Exercise: parking\n\nLlm Evaluation ist für diese Aufgabe deaktiviert. Entferne die .llmignore Datei vom Package der Aufgabe.\n\n\n# Exercise: labyrinth\n\n### Correctness\n- In `StupidAlgorithm` bewegst du die Figur in der Schleife immer mit `moveForward()`, ohne vorher zu prüfen, ob überhaupt ein Pfad voraus ist; damit verlässt du in Levels mit einer Wand vor dir den Pfad und bekommst sofort `GameOver` (die Anforderung war „einfach geradeaus“, aber trotzdem darfst du den Pfad nicht verlassen).\n- `TryStraightFirst` entspricht nicht der Aufgabenbeschreibung: Du prüfst nicht „pro Schleifendurchlauf“ geradeaus/links/rechts und machst sonst eine Kehrtwende, sondern läufst erst beliebig weit geradeaus, drehst dann nur links sonst rechts (rechts wird nie explizit als Option geprüft, und eine echte Kehrtwende ist nicht umgesetzt).\n- `BacktrackingAlgorithm`/`BacktrackingAlgorithmWithMemory` sind nicht als allgemeiner Backtracking-Algorithmus korrekt: Du backtrackst nicht zuverlässig zum letzten Abzweig zurück (stattdessen machst du nach Fehlschlag ein `moveForward()` mit vorherigem 180°-Turn, was je nach Situation in eine Wand/aus dem Labyrinth führen kann oder dich in Schleifen bringt).\n- In `LabyrinthApp` hast du die vorgegebenen `MAPS` durch eigene Maps ersetzt; damit löst du nicht mehr die gestellten Levels aus der Aufgabe.\n\n### Suggestion\n- Für `StupidAlgorithm`: Überlege dir, welche Abfrage du direkt vor jedem `moveForward()` brauchst, damit „geradeaus laufen“ nicht in einen Crash endet, sobald vorne kein Pfad ist.\n- Für `TryStraightFirst`: Baue die Entscheidungslogik wirklich in *einen* wiederholten Ablauf ein: erst „ahead?“, sonst „left?“, sonst „right?“, sonst 180° drehen. Achte darauf, dass „rechts versuchen“ eine eigene Prüfung/Behandlung ist und „Kehrtwende“ aus zwei Rechts- oder zwei Links-Drehungen besteht.\n- Für Backtracking: Backtracking heißt typischerweise „Abzweigungen merken“ oder „besuchte Zustände/Positionen mit Richtung verwalten“ und beim Zurückgehen den Weg wirklich rückwärts laufen, bis du wieder an einer Stelle mit unversuchten Optionen bist. Prüfe bei deinem Rückwärts-Schritt immer, ob der Schritt überhaupt möglich ist, und ob du wirklich zur vorherigen Position zurückkommst (nicht einfach „nach vorne“ in neuer Richtung).\n- Für die Levels: Stelle die originalen `MAPS` wieder her und teste deinen Algorithmus genau damit; sonst kannst du nicht sicher sein, dass er die Aufgabenlevels schafft.\n\n### Code Style\n- Sehr viel auskommentierter „Versuchs-Code“ in `BacktrackingAlgorithm` macht das schwer lesbar; besser alte Ansätze löschen oder in separate Branch/Datei verschieben.\n- `BacktrackingAlgorithmWithMemory` importiert `HashMap`, nutzt es aber nicht.\n- Feldname `HashSet<Position> navi` ist inhaltlich unklar; ein Name wie „visited“/„visitedPositions“ wäre verständlicher.\n- In `Position` wären `equals`/`hashCode` idealerweise mit `@Override` markiert, damit der Compiler Tippfehler/Signaturprobleme erkennen kann.\n\n\n# Exercise: swissmap\n\n### Correctness\n- In `SwissMapApp` ist die `main`-Methode als `void main()` deklariert; so wird sie in Java nicht als Programmeinstieg erkannt (es braucht die übliche `public static ...`-Signatur).\n- Deine interaktiven Bereiche (`getInteractiveArea`) für `City`, `Lake` und `Mountain` sind wahrscheinlich nicht dort, wo das Objekt gezeichnet wird: Du zeichnest die Symbole zentriert um `(toGuiX,toGuiY)`, aber das `Rectangle` startet bei `(x,y)` als linke obere Ecke. Dadurch muss man daneben hovern, damit etwas passiert.\n\n### Suggestion\n- Schau dir die exakte Signatur an, die Java für den Programmeinstieg erwartet, und passe die `main`-Methode in `SwissMapApp` entsprechend an.\n- Überlege dir bei `getInteractiveArea`: Welche Koordinate ist bei `Rectangle(x,y,w,h)` gemeint (oben-links) und welche bei `drawImageCentered(...)` (Zentrum)? Wenn du den Hover-Bereich um das Zentrum legen willst, musst du den Startpunkt des Rechtecks entsprechend relativ zur Mitte verschieben.\n\n### Code Style\n- In `ModeButton` sollten die Felder (`map`, `x`, `y`, `width`, `height`) gekapselt werden (mindestens `private`, idealerweise teilweise `final`), damit nicht aus Versehen von aussen verändert wird.\n- Die Hover-Logik für `City/Lake/Mountain` ist sehr ähnlich (boolean, enter/exit, draw je nach hover). Wenn du das später ausbauen willst, lohnt sich evtl. eine kleine Abstraktion/Hilfsmethode, um Duplikate zu reduzieren.\n- `gui.setBold(true)` / `setFontSize` / `setTextAlignCenter()` werden im `draw` gesetzt, aber nie zurückgesetzt. Das kann andere Komponenten beeinflussen; entweder Zustand wieder herstellen oder lokal möglichst wenig globalen GUI-Zustand verändern.\n\n\n# Exercise: visualizer\n\n### Correctness\n- In `Processor.getInfo()` gibst du `getClockRateKhz()` als `\" MHz\"` aus, obwohl der Wert laut Feldname in kHz gespeichert ist; damit ist die angezeigte Einheit falsch (und damit auch die Detailbeschreibung nicht wie gefordert „geeignet umgerechnet“).\n- In `Processor.getY()` nimmst du den Logarithmus und gibst damit bereits logarithmierte Werte zurück; die Aufgabe verlangt aber eine logarithmische y-Achse (Skalierung), nicht zwingend „Daten vorher loggen“ – das führt zu einer Darstellung, die nicht mehr den echten „effektiven Speed“ als y-Wert entspricht.\n- In `Processor.getInfo()` ist der Inhalt nicht wie gefordert formatiert: es fehlt die Umrechnung in kHz/MHz/GHz mit den genannten Darstellungsregeln (MHz/kHz als ganze Zahl, GHz ggf. mit Dezimalstelle).\n- In `VisualizerApp` ist `main()` als `void main()` (nicht `public static void main(String[] args)`) deklariert; je nach Runner/Setup startet das Programm so nicht über den üblichen Java-Startpunkt.\n\n### Suggestion\n- Schau bei den Prozessoren genau hin: `clockRateKhz` ist die Basis. Überlege dir, ab welchen Schwellwerten du auf MHz bzw. GHz umrechnen willst, und wie du dann den String passend formatierst (inkl. „ganze Zahl“ vs. „Kommazahl“).\n- Für die logarithmische y-Achse: Überlege, ob die Log-Transformation in den Datenpunkt gehört oder eher in die Darstellung (Visualizer). Wenn du die Achse „logarithmisch“ machen willst, sollte der y-Wert semantisch trotzdem „clockRate * cores“ bleiben und nur die Projektion auf Pixel eine Log-Skalierung anwenden.\n- Prüfe, wie deine IDE/Abgabeumgebung Programme startet. Falls sie eine echte Java-`main` erwartet, musst du die Signatur entsprechend anpassen (sonst läuft deine Visualisierung evtl. gar nicht).\n \n3. Code Style:\n- In `Movie.java` ist `import javax.xml.crypto.Data;` unbenutzt und thematisch völlig unrelated – entfernen.\n- In `Processor.getInfo()` ist `int clockRate = 50;` unbenutzt – entfernen (wirkt wie ein vergessenes Experiment).\n- Die Javadoc bei `getX()`/`getY()` sagt `@return int`, obwohl der Rückgabetyp `double` ist – Kommentar an den Typ anpassen.\n",
"status" : "SUCCESS"
}
}