{
"llm" : {
"feedback" : "# Exercise: fractal\n\n### Correctness\n- In `Boxes` ist `drawRec(...)` nicht implementiert; damit werden keine Rechtecke gezeichnet und die Anforderung „Implementiere die draw Methoden in Boxes“ ist nicht erfüllt.\n- In `Triangles` ist `drawRec(...)` nicht implementiert; damit werden keine Dreiecke gezeichnet und die Anforderung „Implementiere die draw Methoden in Triangles“ ist nicht erfüllt.\n\n### Suggestion\n- Für `Boxes.drawRec(...)`: Überlege dir einen klaren Rekursionsabbruch (z.B. bei `n == 0`) und zeichne dann genau **ein** Quadrat mit `g.drawRect(...)`. Im Rekursionsfall (`n > 0`) solltest du die Fläche in passende Teilquadrate aufteilen und für die Teilbereiche mit `n-1` weiterzeichnen.\n- Für `Triangles.drawRec(...)`: Definiere ebenfalls einen Basisfall (z.B. `n == 0`), in dem du das Dreieck mit **drei** `g.drawLine(...)`-Aufrufen zeichnest. Für den Rekursionsfall: Berechne die Mittelpunkte der Dreiecksseiten (jeweils Durchschnitt der Koordinaten) und rufe `drawRec(...)` für die kleineren Teildreiecke mit `n-1` auf.\n\n### Code Style\n- Die `// TODO implement`-Kommentare sind noch im Code; sobald du fertig bist, entferne sie oder ersetze sie durch kurze, beschreibende Kommentare zur Rekursionslogik.\n\n\n# Exercise: knapsack\n\n### Correctness\n- In `KnapsackN`, `main()` hat keine Parameter (`String[] args`). Falls die mitgelieferten Tests/Runner eine normale Java-`main` erwarten, wird das Programm so nicht als Einstiegspunkt erkannt.\n\n### Suggestion\n- Schau dir die Signatur einer gültigen Java-Startmethode an und passe `main` entsprechend an, damit das Projekt (und evtl. Tests, die `main` ausführen) es als Entry Point akzeptieren.\n\n### Code Style\n- Du hast zwei Schleifen direkt nacheinander nur fürs “rückgängig machen” der `maxN`-fachen Änderungen; das ist korrekt, aber man kann das auch kompakter/lesbarer gestalten (z.B. Rückgängigmachen in einer Operation oder symmetrischer Aufbau von Laden/Entladen).\n- In `loadItem`/`unloadItem` könntest du die Kurzschreibweise (`+=`, `-=`) verwenden, das erhöht die Lesbarkeit.\n\n\n# Exercise: queens\n\n### Correctness\n- `QueensSolver.solve()` ist nicht implementiert und liefert immer `false`, dadurch wird keine Lösung gesucht/gefunden.\n- `QueensSolver.count()` ist nicht implementiert und liefert immer `0`, dadurch wird die Anzahl Lösungen nie korrekt gezählt.\n\n### Suggestion\n- Für `solve()`: Du brauchst eine Backtracking-Logik, die Reihe für Reihe eine Spalte ausprobiert, mit `checkPlacement(row, col)` prüft, die Dame setzt, rekursiv zur nächsten Reihe geht und bei Misserfolg wieder entfernt (Backtracking).\n- Für `count()`: Ähnlich wie `solve()`, aber statt beim ersten Fund aufzuhören musst du alle Möglichkeiten durchlaufen und die Anzahl vollständiger Platzierungen aufsummieren; wichtig ist auch hier das Zurücksetzen des Feldes nach dem Rekursionsaufruf.\n\n### Code Style\n- In `Queens.java` ist `main()` nicht die übliche Java-Entry-Signatur (`static void main(String[] args)`); so wird das Programm in einer normalen Java-Umgebung nicht als Startpunkt erkannt.\n\n\n# Exercise: sudoku\n\n### Correctness\n- In `Sudoku.java` ist die `main`-Methode nicht als Java-Entry-Point definiert (`public static void main(String[] args)`); so startet die Applikation nicht wie erwartet.\n- In `solved` und `nofSolutions` ist die Abbruchbedingung hart auf `81` bzw. die Umrechnung hart auf `9` fixiert; laut Interface soll das über `model.size()` funktionieren (auch wenn hier aktuell 9×9 genutzt wird).\n\n### Suggestion\n- Schau dir die Methodensignatur an, die Java für den Programmstart erwartet, und passe deine `main` entsprechend an.\n- Ersetze die festen Zahlen (`81`, `9`, `10`) durch Ausdrücke mit `model.size()` (z.B. Gesamtanzahl Felder und Umrechnung von `fieldNr` zu `(row, column)`), damit dein Solver wirklich für die Modellgröße arbeitet.\n\n### Code Style\n- Die Bedingung `if (model.get(row, column) == 0)` direkt nach `if (model.get(row, column) != 0) return ...` ist redundant; ein `else` reicht und macht den Code klarer.\n- Du rufst mehrfach `model.get(row, column)` hintereinander auf; speichere den Wert einmal in einer Variable, das verbessert Lesbarkeit.\n- In `nofSolutions` heißt die lokale Variable `nofSolutions` genauso wie die Methode; das ist legal, aber verwirrend—ein anderer Variablenname wäre lesbarer.\n",
"status" : "SUCCESS"
},
"unitTest" : {
"tests" : [ {
"name" : "allZero()",
"status" : "PASSED",
"message" : null
}, {
"name" : "uselessStuff()",
"status" : "PASSED",
"message" : null
}, {
"name" : "random1()",
"status" : "PASSED",
"message" : null
}, {
"name" : "random2()",
"status" : "PASSED",
"message" : null
}, {
"name" : "random3()",
"status" : "PASSED",
"message" : null
}, {
"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
} ]
}
}