AutoFeedback API

Result 8ff3cfb4-aa8f-4ee6-9122-6f65fdaff352

{
  "llm" : {
    "feedback" : "# Exercise: fractal\n\n### Correctness\n- In `Boxes`, die rekursive Methode `drawRec(...)` ist nicht implementiert, dadurch wird gar nichts gezeichnet.\n- In `Triangles`, die rekursive Methode `drawRec(...)` ist nicht implementiert, dadurch wird gar nichts gezeichnet.\n\n### Suggestion\n- `Boxes`: Überlege dir einen **Abbruchfall** für die Rekursion (z.B. abhängig von `n`). Im Abbruchfall musst du mindestens **ein Rechteck** mit `g.drawRect(...)` zeichnen. Im Rekursionsfall rufst du `drawRec` mit **kleinerem Quadrat (z.B. halbe Seitenlänge)** und **n-1** für die Teilquadrate auf.\n- `Triangles`: Baue ebenfalls einen **Abbruchfall** (z.B. `n == 0`), in dem du mit `g.drawLine(...)` **alle drei Kanten** des Dreiecks zeichnest. Im Rekursionsfall brauchst du die **Mittelpunkte der Dreiecksseiten**, um daraus die **3 kleineren Dreiecke** zu definieren, und rufst dann `drawRec` für jedes davon mit `n-1` auf.\n\n### Code Style\n- In `Boxes.drawRec(...)` ist der Kommentar `// TODO implement` stehen geblieben; entweder implementieren oder zumindest kurz notieren, welche Parameter was bedeuten (x/y/s/n), damit die Rekursion leichter nachvollziehbar ist.\n- In `Triangles.drawRec(...)` sind TODO-Kommentare noch vorhanden; wenn du implementierst, achte darauf, sprechende Hilfsvariablennamen für die berechneten Mittelpunkte zu verwenden (macht Debugging deutlich einfacher).\n\n\n# Exercise: knapsack\n\n### Correctness\n- In `pack(int i)` berücksichtigst du den Fall „0 Stück von Item i“, aber du prüfst nicht die Fälle „1..maxN Stück von Item i“ korrekt: Du rufst `pack(i + 1)` immer **bevor** du Items lädst, d.h. die rekursive Suche sieht nie Zustände, in denen Item `i` tatsächlich im Rucksack ist.\n- Durch die aktuelle Reihenfolge `pack(i+1) -> load -> unload` werden die geladenen Gegenstände nie „mitgenommen“ in tiefere Rekursionsstufen; dadurch kann das gefundene `maxValue` zu klein bleiben und Tests können fehlschlagen.\n\n### Suggestion\n- Überlege dir für jedes Item `i`: Du willst alle Varianten „0 Stück“, „1 Stück“, …, „maxN Stück“ ausprobieren und **für jede dieser Varianten** dann mit `i+1` weitersuchen. Prüfe, ob deine Rekursion wirklich für jede Stückzahl aufgerufen wird, nachdem das Gewicht/der Wert entsprechend angepasst wurde.\n- Stell dir beim Debuggen einen kleinen Trace vor (z.B. i=0, n=2): In welchem Zustand (`currWeight/currValue`) wird `pack(i+1)` aufgerufen? Genau diese Zustände müssen die unterschiedlichen Anzahlen abdecken.\n\n### Code Style\n- `amount` startet bei 1 und du nutzt „0 Stück“ implizit über den ersten `pack(i+1)`-Aufruf innerhalb der Schleife; das ist schwer zu lesen und fehleranfällig. Eine klare Trennung „erst 0 Stück, dann 1..maxN“ (oder eine einheitliche Schleife inkl. 0) wäre verständlicher.\n- Die zwei `for`-Schleifen zum Laden und direkt wieder Entladen machen den Ablauf unnötig schwer nachzuvollziehen; versuche, die Zustandsänderung und den Rekursionsaufruf enger zusammen zu halten, damit man leichter erkennt, welche Zustände getestet werden.\n\n\n# Exercise: queens\n\nLlm Evaluation ist für diese Aufgabe deaktiviert. Entferne die .llmignore Datei vom Package der Aufgabe.\n\n\n# Exercise: sudoku\n\nLlm Evaluation ist für diese Aufgabe deaktiviert. Entferne die .llmignore Datei vom Package der Aufgabe.\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
    } ]
  }
}