{
"llm" : {
"feedback" : "# Exercise: parking\n\n### Correctness\n- In `GroupCard` ist der Fall „mehr als 20 Personen“ nicht umgesetzt; laut Anforderungen ist das **nicht erlaubt** (es fehlt also eine Ablehnung/Fehlerbehandlung für `persons > 20`).\n- In `GroupCard` verwendest du für `persons >= 11` immer den Tarif 2.00 CHF/h; damit werden auch Werte **> 20** stillschweigend akzeptiert, was der Tabelle widerspricht.\n\n### Suggestion\n- Überlege dir im `GroupCard`-Konstruktor (oder in `cost()`), wie du Eingaben **größer als 20** erkennst und dann verhinderst, dass so eine Karte überhaupt sinnvoll verwendet werden kann (z.B. durch eine Exception oder ein ähnliches Abbruch-Verhalten).\n- Prüfe deine `if`-Bedingungen in `cost()` so, dass die Bereiche aus der Tabelle wirklich **exakt** abgebildet werden (inkl. einer eigenen Behandlung für „> 20“).\n\n### Code Style\n- In `GroupCard` ist `HOURLY_RATE` deklariert, aber wird nie verwendet; entweder entfernen oder konsequent nutzen.\n- In `FlatRateCard` wird `totalTime` zwar hochgezählt und zurückgesetzt, hat aber keinen Einfluss auf `cost()`; das ist verwirrend—entweder brauchst du die Zeit dort nicht, oder du solltest klarer machen, warum sie trotzdem gespeichert wird (z.B. für Statistik).\n\n\n# Exercise: labyrinth\n\n### Correctness\n- `TryStraightFirst` erfüllt die geforderte Entscheidungs-Reihenfolge nicht: Wenn geradeaus nicht geht, soll links **oder** rechts versucht werden und wenn beides nicht geht, rechtsum kehrt (180°). Deine Version prüft rechts, und wenn das nicht geht, drehst du nur nach links (insgesamt 90° relativ zur Startrichtung) und machst in diesem Durchlauf keinen U‑Turn.\n- `TryStraightFirst` prüft nie explizit die linke Seite als Alternative (wenn rechts blockiert ist), sondern verändert die Richtung und verlässt die Iteration ohne den “links versuchen”-Schritt.\n- `BacktrackingAlgorithm`: Wenn `solve(...)` am Ende `false` zurückgibt (kein Weg gefunden), bleibt die Figur unter Umständen irgendwo im Labyrinth stehen, statt am Startzustand der Rekursion wieder “zurückgespult” zu sein. Das kann dazu führen, dass das Spiel mit “Ziel nicht gefunden.” endet, obwohl du eigentlich alles abgesucht hast (weil die Figur nicht zwingend am korrekten Zustand für den Aufrufer endet).\n- `BacktrackingAlgorithm`: Du verwendest `visited` nur über Position `(row,col)`. In einem Labyrinth kann dieselbe Position mit unterschiedlicher Blickrichtung zu unterschiedlichen noch nicht erkundeten Optionen führen; mit deinem Ansatz kannst du Zustände zu früh als “erledigt” markieren und dadurch Wege überspringen.\n\n### Suggestion\n- Für `TryStraightFirst`: Überlege dir pro Schleifendurchlauf eine klare Prioritätenliste (geradeaus, dann links, dann rechts, sonst 180° drehen) und stelle sicher, dass du nach jedem Dreh die passenden Pfad-Abfragen machst, ohne die ursprüngliche Orientierung “aus Versehen” zu verlieren.\n- Für `TryStraightFirst`: Wenn weder links noch rechts möglich ist, kontrolliere, dass du wirklich um 180° zur aktuellen Richtung drehst (also “rechtsum kehrt”) und nicht nur um 90°.\n- Für `BacktrackingAlgorithm`: Achte darauf, dass jede rekursive Erkundung beim Zurückkehren den `Figure`-Zustand (Position **und** Richtung) wieder exakt so herstellt, wie er beim Eintritt in den rekursiven Aufruf war.\n- Für `BacktrackingAlgorithm`: Prüfe, ob du statt “visited pro Zelle” lieber “visited pro Zustand” (z.B. Zelle + Richtung) brauchst, damit Backtracking nicht legitime Optionen abschneidet.\n\n### Code Style\n- In `BacktrackingAlgorithm` ist `dirOffsets` unnötig kompliziert und macht den Algorithmus schwerer verständlich (zusätzliche Map, Probe-Schritt, wieder zurück). Das erhöht die Fehleranfälligkeit und erschwert das Debugging.\n- `dirOffsets` ist als Feld mit vollqualifizierten Typen (`java.util.Map`, `java.util.HashMap`) deklariert, während du oben bereits Imports verwendest; einheitliche Imports/Typverwendung würde die Lesbarkeit verbessern.\n- Du hast in der Abgabe viele Template-Dateien (Figure, Labyrinth, GameOver, LabyrinthGame) unverändert mitkopiert; üblich ist, nur die tatsächlich neu erstellten/geänderten Klassen abzugeben (je nach Abgabe-Setup).\n\n\n# Exercise: swissmap\n\n### Correctness\n- In `SwissMapApp` ist die `main`-Methode als `void main()` deklariert; so wird sie von Java nicht als Programmeinstieg erkannt (es braucht die korrekte Signatur, sonst startet das Programm nicht wie verlangt).\n- In `SwissMapApp` verwendest du `gui.addComponents(...)`; falls die verwendete Gui-Bibliothek diese Methode nicht anbietet (üblich ist `addComponent(...)` pro Objekt), kompiliert das nicht und die Objekte werden nicht registriert.\n- `ModeButton` implementiert zwar `Hoverable`, reagiert aber nicht sichtbar auf Hover (die Aufgabe verlangt, dass er „nicht nur Drawable und Hoverable, sondern auch Clickable implementiert“ und als Knopf angezeigt wird; Hoverable soll dabei sinnvoll genutzt werden, nicht nur „leer implementiert“).\n\n### Suggestion\n- Prüfe die exakte Java-Startsignatur für `main` (Stichworte: `public`, `static`, Parameter) und passe sie so an, dass das Programm wirklich gestartet werden kann.\n- Schau in der Dokumentation/IntelliSense der `Gui`-Klasse nach, ob es `addComponents` wirklich gibt; falls nicht, iteriere über die Arrays und registriere jedes Element einzeln mit der vorhandenen Methode.\n- Nutze beim `ModeButton` den gleichen Hover-Ansatz wie bei City/Lake/Mountain (z. B. ein `hovered`-Flag in `onMouseEnter/Exit`) und verwende das dann in `draw`, um den Button bei Hover optisch zu verändern (Farbe/Rahmen/Text).\n\n### Code Style\n- Einheitliche Namensgebung: `SwissMap Karte` ist gemischt deutsch/englisch und beginnt groß wie eine Klasse; verwende lieber einen üblichen lowerCamelCase-Variablennamen.\n- In `ModeButton` ist der Button-Text falsch geschrieben (`\"Sattelite View\"` statt `\"Satellite View\"`).\n- Du importierst in mehreren Klassen `Shape`, verwendest aber den vollqualifizierten Namen für `Rectangle` (`new ch.trick17.gui.component.Rectangle(...)`); entscheide dich für einen konsistenten Weg (Import oder vollqualifiziert), damit es lesbarer bleibt.\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"
}
}