{
"llm" : {
"feedback" : "# Exercise: parking\n\n### Correctness\n- `ParkingCard` ist nicht als `public interface ParkingCard` deklariert (bei dir ist es package-private: `interface ParkingCard`). Das verletzt die Vorgabe und kann je nach Tests/Package-Struktur zu Sichtbarkeitsproblemen führen.\n- `FlatRateCard.cost()` gibt immer 150 zurück, unabhängig davon, ob die Karte überhaupt im aktuellen Abrechnungszeitraum „verwendet“ wurde. In deinem Example wird damit allein durch das Registrieren der Karte schon 150 CHF Umsatz erzeugt; prüfe, ob das mit der erwarteten Gesamtsumme (156.75 CHF) und der Idee von `reset()` wirklich zusammenpasst.\n\n### Suggestion\n- Schau dir die Signatur/Vorgabe für `ParkingCard` genau an: Zugriffmodifier + `interface`-Keyword müssen exakt stimmen, damit die restlichen Klassen/Tests darauf zugreifen können.\n- Überlege bei der `FlatRateCard`, wie `reset()` und `cost()` zusammenspielen sollen: Soll die Monatsgebühr bei jeder Revenue-Berechnung immer zählen, oder nur einmal pro „Abrechnungsperiode“? Nutze dafür ggf. internen Zustand (z.B. ob schon verrechnet wurde), damit `calculateRevenueAndReset()` mit dem erwarteten Output zusammenpasst.\n\n### Code Style\n- `ParkingCard` hat uneinheitliche Modifier: In einem Interface sind Methoden implizit `public`, das explizit zu schreiben ist zwar erlaubt, aber redundant – wichtiger ist, dass das Interface selbst sauber als `public interface` definiert ist.\n- In `GroupCard` ist der Exception-Text `\"kadsjfkla\"` nicht aussagekräftig; verwende eine klare Fehlermeldung (z.B. warum/ab welcher Personenzahl ungültig).\n\n\n# Exercise: labyrinth\n\n### Correctness\n- In `BacktrackingAlgorithm.solve` prüfst du `pathToTheLeft()` und `pathToTheRight()` noch in der *aktuellen* Ausrichtung, drehst dann aber und gehst vorwärts – nach dem Zurückgehen (`backstep`) stellst du die Richtung nicht zuverlässig wieder so her, wie sie vor dem jeweiligen Abzweig war. Dadurch kann der Algorithmus nach einem fehlgeschlagenen Versuch in einer falschen Orientierung weiterprüfen/weiterlaufen und falsche Entscheidungen treffen.\n- Dein Backtracking merkt sich keine bereits besuchten Zustände (z.B. Position+Richtung) und kann daher in Labyrinthen mit Zyklen in sehr tiefe/evtl. endlose Rekursion geraten, statt garantiert zu terminieren (die Aufgabe verlangt einen allgemeinen Algorithmus für alle Levels).\n\n### Suggestion\n- Überlege dir für jeden Rekursionszweig ein Invariant: “Wenn `solve` zurückkommt (egal ob true/false), steht die Figur wieder **genau** so (Zelle + Richtung) wie beim Eintritt in diesen Aufruf.” Prüfe dann Schritt für Schritt, ob das bei deinen Links-/Rechts-Zweigen wirklich eingehalten ist.\n- Um Endlosschleifen/Rekursion in zyklischen Wegen zu verhindern: speichere dir, welche “Zustände” du schon ausprobiert hast. Tipp: Ein Zustand ist meist mehr als nur `(row,col)` – je nach Vorgehen kann auch die Blickrichtung relevant sein. Sobald du in einen bereits bekannten Zustand kommst, solltest du diesen Pfad nicht nochmals rekursiv verfolgen.\n\n### Code Style\n- Du hast sehr viele vorgegebene Klassen (`Figure`, `Labyrinth`, `LabyrinthGame`, …) komplett in deinem Attempt mitkopiert. Das ist unnötig/fehleranfällig; üblicherweise reicht es, nur deine neuen Algorithmus-Klassen (und die kleine Änderung in `LabyrinthApp`) abzugeben.\n- In `BacktrackingAlgorithm` wären klarere Namen/Kommentare hilfreich, weil die Orientierungslogik sonst schnell unübersichtlich wird (z.B. kurz dokumentieren, was `backstep` garantiert: “geht 1 Feld zurück und stellt ursprüngliche Blickrichtung wieder her”).\n\n\n# Exercise: swissmap\n\n### Correctness\n- In `ModeButton.getInteractiveArea(...)` ist das Rechteck viel zu breit (`700` statt ungefähr der Button-Breite). Dadurch ist ein grosser Teil der Karte „klickbar“/hoverbar wie der Button, was das gewünschte Verhalten verletzt.\n- In `Lake.draw(...)` und `Mountain.draw(...)` verwendest du für `drawImage(...)` einen Dateisystem-Pfad (`\"src/main/resources/...\"`) statt einen Resource-Pfad wie bei `SwissMap`. Je nach Umgebung wird das Bild so nicht gefunden und damit nicht angezeigt.\n\n### Suggestion\n- Schau dir beim Button nochmals die Zahlen an, die du in `draw(...)` für Position und Grösse verwendest (z. B. `fillRect(10, 10, 70, 30)`) und leite daraus die Dimensionen für `getInteractiveArea(...)` ab, damit die interaktive Fläche exakt dem gezeichneten Button entspricht.\n- Orientiere dich bei den Bildpfaden an `SwissMap.draw(...)`: Wenn `SwissMap` das Bild ohne `\"src/main/resources\"` laden kann, sollten Lake/Mountain ihre Icons typischerweise auf die gleiche Art referenzieren (also als Resource innerhalb des Classpath).\n\n### Code Style\n- Import in `City`: `ch.trick17.gui.component.Shape` wird genutzt, aber du importierst zusätzlich `ch.trick17.gui.component.Rectangle` nicht direkt und verwendest stattdessen den vollqualifizierten Namen (`new ch.trick17...Rectangle(...)`). Einheitlicher wäre: passend importieren und dann kurz verwenden.\n- In `ModeButton` ist `private SwissMap map;` nicht `final`, obwohl es nach dem Konstruktor nie mehr geändert wird.\n- Methodennamen/Variablennamen: `isSatelite` ist falsch geschrieben (sollte konsistent mit „Satellite“ sein), das erschwert späteres Lesen/Suchen.\n- `ModeButton.onMouseEnter/Exit` sind leer: das ist ok, aber wenn du `Hoverable` implementierst, wäre ein kleiner visueller Effekt (Farbe/Border) lesbarer; sonst könntest du das Interface weglassen, falls du es nicht brauchst.\n\n\n# Exercise: visualizer\n\nLlm Evaluation ist für diese Aufgabe deaktiviert. Entferne die .llmignore Datei vom Package der Aufgabe.\n",
"status" : "SUCCESS"
}
}