{
"llm" : {
"feedback" : "# Exercise: parking\n\n### Correctness\n- `FlatRateCard.cost()` liefert immer 150 CHF, unabhängig davon, ob überhaupt geparkt wurde; damit wird beim Beispielablauf (wo die FlatRateCard 300 Minuten parkt) der Umsatz deutlich zu hoch und kann nicht auf die geforderten **156.75 CHF** kommen.\n- In `GroupCard` erlaubst du `person == 0` (du prüfst nur `< 0`), die Tabelle startet aber bei „bis 5“ Personen – in der Regel ist 0 Personen nicht sinnvoll/erlaubt.\n\n### Suggestion\n- Überlege dir bei der `FlatRateCard`, wie „fixe Monatskosten“ im Kontext von `calculateRevenueAndReset()` zu verstehen sind: Soll die Monatsgebühr **immer** bei jeder Abrechnung anfallen, oder nur dann, wenn die Karte im Abrechnungszeitraum tatsächlich benutzt wurde? Schau dir dazu auch an, wie die Methode nach jedem Durchlauf `reset()` aufruft und was das für „monatlich“ bedeutet.\n- Für die Personenanzahl in `GroupCard`: Entscheide, welche Minimalzahl logisch ist (z.B. mindestens 1) und passe die Validierung entsprechend an, sodass „nicht erlaubt“ konsistent zur Aufgabenbeschreibung ist.\n\n### Code Style\n- In `FlatRateCard` ist `totalTime` aktuell nur für `reset()`/`park()` da, beeinflusst aber die Kosten nicht. Entweder konsequent nutzen (z.B. zur Entscheidung, ob Gebühren anfallen) oder weglassen, damit der Zweck der Variable klar bleibt.\n- In `GroupCard` wäre der Feldname `person` als Anzahl missverständlich; ein Name wie `persons`/`peopleCount` (oder deutsch `anzahlPersonen`) macht lesbarer, dass es um eine Menge geht.\n\n\n# Exercise: labyrinth\n\nLlm Evaluation ist für diese Aufgabe deaktiviert. Entferne die .llmignore Datei vom Package der Aufgabe.\n\n\n# Exercise: swissmap\n\n### Correctness\n- `City` und `Lake` implementieren noch nicht `Drawable` und haben keine `draw(Gui)`-Methode, obwohl das in Teil (b) gefordert ist.\n- In `SwissMapApp` fügst du bislang nur die `Mountain`-Objekte als Komponenten hinzu, aber nicht die `City`- und `Lake`-Objekte (Teil (b) fordert alle drei Typen).\n- Die Anforderungen aus Teil (c) sind noch nicht umgesetzt: Keines der Objekte (`City`, `Lake`, `Mountain`) implementiert `Hoverable` (inkl. `getInteractiveArea`, `onMouseEnter`, `onMouseExit`) und zeigt beim Hovern eine Beschreibung.\n- Teil (d) ist noch nicht umgesetzt: Es gibt keine `ModeButton`-Klasse, kein Button wird hinzugefügt, und der Satellitenmodus wird nicht per Klick umgeschaltet.\n\n### Suggestion\n- Schau dir an, welche Methoden das `Drawable`-Interface verlangt, und ergänze diese dann analog zu deinem `Mountain` auch bei `City` und `Lake` (Position über `coord.toGuiX(gui)`/`toGuiY(gui)`).\n- In der `main`-Methode: Iteriere zusätzlich über `cities` und `lakes` und registriere diese ebenfalls mit `gui.addComponent(...)`, so wie du es bei `mountains` bereits machst.\n- Für Hover: Du brauchst pro Objekt einen “Hover-Status” (z.B. boolean), der in `onMouseEnter/Exit` gesetzt wird, und in `draw` verwendest du ihn dann, um die Beschreibung (z.B. `toString()`) zu zeichnen.\n- Für `getInteractiveArea`: Überlege dir eine passende Fläche um das Icon/den Text herum (typischerweise ein `Rectangle`), damit das Hovering auch zuverlässig auslöst.\n- Für den Button: Der Button muss beim Klicken den aktuellen Zustand von `SwissMap.isSatelliteMode()` umschalten (oder entsprechend `setSatelliteMode(...)` aufrufen). Dafür braucht der Button eine Referenz auf das `SwissMap`-Objekt, die du im Konstruktor übergibst.\n\n### Code Style\n- Unnötiger Import in `SwissMapApp`: `ch.trick17.gui.component.Component` wird nicht verwendet.\n- Achte bei `Mountain.draw(...)` auf konsistente Abstände (nach Kommas, nach `if/for`, etc.), das macht den Code deutlich lesbarer.\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"
}
}