AutoFeedback API

Result b52a2179-7e1a-403c-8cad-a26825efcbab

{
  "llm" : {
    "feedback" : "# Exercise: parking\n\n### Correctness\n- `FlatRateCard` berücksichtigt die Parkzeit nicht, was zwar ok ist, aber du setzt trotzdem `totalTime`/`park(...)` um: Dadurch wird im Beispiel beim `card3` zusätzlich zu den 150 CHF nichts “falsch” berechnet, aber es ist unklar, ob die Flatrate wirklich unabhängig von Nutzung sein soll (gemäss Aufgabe: fix 150/Monat, also ja) — wichtiger: Im Gesamtsystem muss der Output **156.75 CHF** sein; prüfe, ob dein Run genau diesen Betrag ausgibt (Format und Zahl).\n- `GroupCard`: Du erlaubst `person == 0` (weil du nur `< 0` verbietest). In der Aufgabenbeschreibung ist “Anzahl Personen” implizit mindestens 1; falls Tests davon ausgehen, dass 0 nicht gültig ist, kann das zu einem Fehler führen.\n\n### Suggestion\n- Lass dein Programm laufen und vergleiche den berechneten Gesamtumsatz exakt mit **156.75**. Falls es abweicht: prüfe insbesondere, ob die Flatrate **einmal pro Abrechnung** (nicht pro Parkvorgang) gezählt wird und ob die Gruppentarife wirklich pro Stunde mit `minutes/60.0` gerechnet werden.\n- Überlege dir, welche Werte für “Anzahl Personen” sinnvoll sind und ob du im Konstruktor die untere Grenze entsprechend setzen solltest (z.B. was bedeutet 0 Personen in deinem Modell?).\n\n### Code Style\n- In `FlatRateCard` sind `totalTime` und das Aufsummieren in `park(...)` faktisch ungenutzt, weil `cost()` immer 150 zurückgibt; das kann verwirren und du könntest es vereinfachen.\n- In `GroupCard`/`IndividualCard` fehlen `@Override`-Annotationen bei den Interface-Methoden (bei `FlatRateCard` hast du sie schon). Einheitlich `@Override` zu verwenden hilft, Tippfehler/Signaturprobleme früh zu erkennen.\n- Kleinigkeit: Feldname `person` klingt wie eine einzelne Person; für die Anzahl wäre z.B. ein pluralischer/quantitativer Name lesbarer.\n\n\n# Exercise: labyrinth\n\n### Correctness\n- In `BacktrackingAlgorithm` kann im `else`-Zweig `path.get(path.size() - 1)` aufgerufen werden, obwohl `path` leer ist (z.B. wenn du direkt am Start in eine Sackgasse gerätst oder noch keinen Schritt vorwärts gemacht hast) → das führt zu einem `IndexOutOfBoundsException`.\n- In `BacktrackingAlgorithm` fügst du `figure.dir()` erst **nach** `moveForward()` in `path` ein. Beim Zurückgehen verwendest du diesen Wert dann als “Richtung zum Zurückdrehen”. Dadurch speicherst du aber nicht zuverlässig die Richtung, die dich *in die aktuelle Zelle gebracht hat*, sondern die Richtung *nach dem Betreten* (und ggf. nach vorherigen Drehungen). Das kann dazu führen, dass dein `turnBack` in manchen Situationen in die falsche Richtung ausrichtet und du nicht korrekt zurücktrackst.\n- In `TryStraightFirst` verwendest du innen eine `while (figure.pathAhead()) { moveForward(); }`. Das entspricht nicht der Aufgabenbeschreibung “in jedem Schleifendurchlauf prüfen … und dann einen Schritt” (also eher eine einzelne Entscheidung pro Iteration). Dadurch ist dein Ablaufverhalten anders als gefordert.\n\n### Suggestion\n- Überlege dir, welche Information dein Stack (`path`) wirklich speichern soll, damit du beim Backtracking deterministisch den “letzten Abzweig” rückgängig machen kannst: Speichere eher den Schritt/Move, der dich in die nächste Zelle geführt hat (oder die Gegenrichtung), und zwar zu dem Zeitpunkt, wo du ihn ausführst.\n- Baue eine Absicherung ein, bevor du beim Backtracking das letzte Element aus `path` liest/entfernst: Was ist dein “Fallback”, wenn es nichts zum Zurückgehen gibt?\n- Für `TryStraightFirst`: Wenn du näher an der Aufgabenbeschreibung bleiben willst, ersetze das “so lange vorwärts laufen wie möglich” durch genau **eine** Vorwärtsbewegung pro äußerer Schleifeniteration, und entscheide danach erneut (geradeaus/links/rechts/umkehren).\n\n### Code Style\n- Tippfehler in Methodennamen: `nexCellVisited` sollte konsistent und korrekt benannt werden (z.B. `nextCellVisited`), das verbessert Lesbarkeit deutlich.\n- In `BacktrackingAlgorithm` ist `ArrayList<Integer> path` semantisch eher ein Stack; eine passendere Datenstruktur/Benennung würde die Intention klarer machen (z.B. Name wie `stack`/`backtrackStack`).\n- Das Speichern von Koordinaten als zusammengesetzter String (`\"row,col\"`) funktioniert, ist aber unhandlich/fehleranfällig; eine kleine Hilfsmethode für den Key oder ein kleines Koordinaten-Objekt würde die Lesbarkeit verbessern.\n\n\n# Exercise: swissmap\n\nLlm Evaluation ist für diese Aufgabe deaktiviert. Entferne die .llmignore Datei vom Package der Aufgabe.\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"
  }
}