AutoFeedback API

Result b43dda86-01cc-4ef6-bbfb-d67ecbd044b9

{
  "llm" : {
    "feedback" : "# Exercise: fractal\n\n### Correctness\n- `Boxes.drawRec(...)` ist nicht implementiert, damit wird beim Ausführen keine Boxen-Fraktalform gezeichnet.\n- `Triangles.drawRec(...)` ist nicht implementiert, damit wird beim Ausführen keine Dreiecks-Fraktalform gezeichnet.\n\n### Suggestion\n- Für `Boxes`: Überlege dir einen **Abbruchfall** (z.B. wenn `n == 0`) und zeichne dann genau **ein** Rechteck mit `g.drawRect(x, y, s, s)`. Für den rekursiven Fall musst du die Fläche in **Teilquadrate** aufteilen und `drawRec` mit angepassten `(x,y)` und `s` (typischerweise `s/2`) aufrufen, wobei `n` kleiner wird.\n- Für `Triangles`: Im **Basisfall** (z.B. `n == 0`) zeichnest du das Dreieck mit **drei Linien** zwischen den drei Punkten. Im rekursiven Fall brauchst du die **Mittelpunkte** der Dreiecksseiten (aus den gegebenen Koordinaten berechnen) und rufst `drawRec` für die entstehenden kleineren Dreiecke mit `n-1` auf.\n\n### Code Style\n- Die `TODO`-Kommentare sind okay als Platzhalter, aber sobald du implementierst, achte darauf, die Methoden nicht leer zu lassen und ggf. kurze Kommentare zu den Basis-/Rekursionsfällen zu setzen.\n\n\n# Exercise: knapsack\n\n### Correctness\n- In `KnapsackImpl` sind `pack(int i)`, `loadItem(int i)` und `unloadItem(int i)` nicht implementiert; damit kann `solve()` kein korrektes Optimum berechnen und die Tests können nicht grün werden.\n- In `KnapsackN` ist `main()` nicht als Java-Entry-Point definiert (Signatur weicht von `main(String[] args)` ab); so lässt sich das Programm nicht wie erwartet starten.\n\n### Suggestion\n- Für `pack(int i)`: Überlege dir die Rekursion so, dass du pro Item-Typ nicht nur „0 oder 1“, sondern „0 bis maxN“ Exemplare ausprobieren kannst, und dabei jeweils zum nächsten Index weitergehst.\n- Achte darauf, dass du nur Lösungen wertest, die das Gewichtslimit einhalten, und dass du am Ende (wenn du alle Items betrachtet hast) `maxValue` aktualisierst, falls `currValue` besser ist.\n- Für `loadItem/unloadItem`: Stelle sicher, dass nach dem Durchprobieren der n-fachen Mitnahme eines Items der Zustand (`currWeight/currValue`) wieder exakt auf dem Stand vor dem Item ist (Backtracking), sonst beeinflussen spätere Rekursionszweige das Ergebnis.\n- Passe die `main`-Methode so an, dass sie von der JVM als Startpunkt erkannt wird.\n\n### Code Style\n- Die Methoden heißen in deiner Vorlage `loadItem/unloadItem`, während die Aufgabe/Beispiel eher „pack/unpack“ impliziert; wichtig ist vor allem konsistente Benennung (und dass `pack` dann auch diese Methoden nutzt).\n- In `KnapsackN` fehlt der Parameter `String[] args` in `main`; auch wenn das „nur Demo-Code“ ist, ist die Standard-Signatur lesbarer und sofort ausführbar.\n\n\n# Exercise: queens\n\n### Correctness\n- `QueensSolver.solve()` ist nicht implementiert und gibt immer `false` zurück, damit wird keine Lösung gesucht/gefunden und das Board bleibt leer.\n- `QueensSolver.count()` ist nicht implementiert und gibt immer `0` zurück, damit wird die Anzahl Lösungen nicht gezählt.\n- In `Queens.java` ist `main()` nicht `static` und hat keine `String[] args`-Parameter; so wird das Programm als Java-Startpunkt normalerweise nicht ausgeführt.\n\n### Suggestion\n- Für `solve()`: Überlege dir eine rekursive Backtracking-Struktur pro Zeile: versuche in der aktuellen Zeile jede Spalte, prüfe mit `checkPlacement`, setze die Queen, gehe zur nächsten Zeile, und wenn es dort nicht klappt, nimm die Queen wieder weg (Backtracking).\n- Für `count()`: Nutze eine sehr ähnliche Rekursion wie bei `solve()`, aber statt beim ersten Fund zu stoppen, summierst du alle vollständigen Platzierungen (Basisfall: wenn alle Zeilen belegt sind, zählt das als 1 Lösung).\n- Für `main()`: Schau dir an, wie eine Java-`main`-Methode als Programmeinstieg genau signiert sein muss, damit die Runtime sie findet.\n\n### Code Style\n- Die `// TODO implement`-Platzhalter sind noch drin; wenn du implementierst, entferne/ersetze sie durch sinnvolle Methodenköpfe und ggf. kleine Kommentare zur Rekursionsidee.\n- In `getBoard()` ist `return this.board;` ok, aber in der restlichen Klasse nutzt du `board` ohne `this`; bleib konsistent (entweder immer mit oder immer ohne `this`, wo nicht nötig).\n\n\n# Exercise: sudoku\n\n### Correctness\n- In `SudokuSolverImpl`, `solved(SudokuModel model, int fieldNr)` ist nicht implementiert und liefert immer `false`; damit wird kein Sudoku gelöst, obwohl es die Aufgabe verlangt.\n- In `SudokuSolverImpl`, `nofSolutions(SudokuModel model, int fieldNr, int max)` ist nicht implementiert und liefert immer `0`; damit wird die Anzahl Lösungen nie korrekt gezählt.\n- In `Sudoku.java` ist `main()` weder `public` noch `static` und hat keine `String[] args`-Parameter; so startet die Applikation typischerweise nicht über den Java-Entry-Point.\n\n### Suggestion\n- Für `solved(...)`: Überlege dir eine Rekursions-/Backtracking-Struktur mit einer klaren Abbruchbedingung (z.B. “alle Felder abgearbeitet”). Für jedes Feld: wenn es schon belegt ist, geh zum nächsten; wenn es leer ist, probiere nacheinander zulässige Werte, prüfe die Gültigkeit mit dem `checker` und backtracke (Feld wieder leeren), falls der Rekursionsschritt nicht zum Erfolg führt.\n- Für `nofSolutions(...)`: Nutze eine sehr ähnliche Rekursion wie beim Lösen, aber statt beim ersten Fund abzubrechen, zählst du jede vollständige Belegung als `1` und summierst über alle gültigen Möglichkeiten. Achte darauf, dass du die Suche abbrichst, sobald `max` erreicht ist (bzw. du schon `max` Lösungen gesammelt hast), und dass du beim Zurückgehen den Zustand im Model wieder zurücksetzt.\n- Für `Sudoku.main`: Passe die Signatur so an, dass Java sie als Einstiegspunkt erkennt (Zugriffsmodifizierer/`static`/Parameter). Schau dir an, wie Java Programme standardmäßig gestartet werden.\n\n### Code Style\n- Die `// TODO implement`-Stellen sind noch im Code; sobald du implementierst, entferne sie oder ersetze sie durch kurze, hilfreiche Kommentare zur Logik.\n- In `Sudoku.java` fehlt bei `main` die übliche Signatur; selbst wenn das “nur” ein Versehen ist, verwirrt das beim Lesen/Starten und sollte konsistent zur restlichen Vorlage sein.\n",
    "status" : "SUCCESS"
  },
  "unitTest" : {
    "tests" : [ {
      "name" : "allZero()",
      "status" : "PASSED",
      "message" : null
    }, {
      "name" : "uselessStuff()",
      "status" : "PASSED",
      "message" : null
    }, {
      "name" : "random1()",
      "status" : "FAILED",
      "message" : "expected: <190> but was: <0>"
    }, {
      "name" : "random2()",
      "status" : "FAILED",
      "message" : "expected: <340> but was: <0>"
    }, {
      "name" : "random3()",
      "status" : "FAILED",
      "message" : "expected: <558> but was: <0>"
    }, {
      "name" : "boardIsValidAfterSolveN4()",
      "status" : "FAILED",
      "message" : "Board must contain exactly N queens ==> expected: <4> but was: <0>"
    }, {
      "name" : "boardIsValidAfterSolveN5()",
      "status" : "FAILED",
      "message" : "Board must contain exactly N queens ==> expected: <5> but was: <0>"
    }, {
      "name" : "boardIsValidAfterSolveN8()",
      "status" : "FAILED",
      "message" : "Board must contain exactly N queens ==> expected: <8> but was: <0>"
    }, {
      "name" : "boardSizeIsCorrectForN4()",
      "status" : "PASSED",
      "message" : null
    }, {
      "name" : "boardSizeIsCorrectForN8()",
      "status" : "PASSED",
      "message" : null
    }, {
      "name" : "countN1()",
      "status" : "FAILED",
      "message" : "N=1 has exactly 1 solution ==> expected: <1> but was: <0>"
    }, {
      "name" : "countN2()",
      "status" : "PASSED",
      "message" : null
    }, {
      "name" : "countN3()",
      "status" : "PASSED",
      "message" : null
    }, {
      "name" : "countN4()",
      "status" : "FAILED",
      "message" : "N=4 has exactly 2 solutions ==> expected: <2> but was: <0>"
    }, {
      "name" : "countN5()",
      "status" : "FAILED",
      "message" : "N=5 has exactly 10 solutions ==> expected: <10> but was: <0>"
    }, {
      "name" : "countN6()",
      "status" : "FAILED",
      "message" : "N=6 has exactly 4 solutions ==> expected: <4> but was: <0>"
    }, {
      "name" : "countN8()",
      "status" : "FAILED",
      "message" : "N=8 has exactly 92 solutions ==> expected: <92> but was: <0>"
    }, {
      "name" : "solveReturnsTrueForN1()",
      "status" : "FAILED",
      "message" : "N=1 has exactly one solution ==> expected: <true> but was: <false>"
    }, {
      "name" : "solveReturnsTrueForN4()",
      "status" : "FAILED",
      "message" : "N=4 has valid queen placements ==> expected: <true> but was: <false>"
    }, {
      "name" : "solveReturnsTrueForN8()",
      "status" : "FAILED",
      "message" : "N=8 has valid queen placements ==> expected: <true> but was: <false>"
    }, {
      "name" : "solveReturnsFalseForN2()",
      "status" : "PASSED",
      "message" : null
    }, {
      "name" : "solveReturnsFalseForN3()",
      "status" : "PASSED",
      "message" : null
    } ]
  }
}