{
"llm" : {
"feedback" : "# Exercise: fractal\n\n### Correctness\n- In `Boxes`, die rekursive Zeichenmethode `drawRec(...)` ist nicht implementiert; damit wird keine Box/kein Fraktal gezeichnet.\n- In `Triangles`, die rekursive Zeichenmethode `drawRec(...)` ist nicht implementiert; damit wird kein Dreiecks-Fraktal gezeichnet.\n\n### Suggestion\n- Für `Boxes.drawRec(...)`: Überlege dir eine klare Abbruchbedingung für die Rekursion (z.B. bei einer bestimmten Tiefe `n`) und zeichne dann genau *ein* Quadrat; im Rekursionsfall zerlege das aktuelle Quadrat in kleinere Teilquadrate und rufe `drawRec` für diese mit angepassten Koordinaten/Grössen auf.\n- Für `Triangles.drawRec(...)`: Definiere ebenfalls eine Abbruchbedingung, in der du mit `g.drawLine(...)` die drei Kanten des aktuellen Dreiecks zeichnest; im Rekursionsfall berechne die Mittelpunkte der Dreiecksseiten und rufe `drawRec` für die entstehenden kleineren Dreiecke mit `n-1` auf.\n\n### Code Style\n- Die `// TODO implement`-Kommentare sind noch übrig; sobald du implementiert hast, entferne/ersetze sie durch sinnvolle kurze Kommentare (z.B. “base case” / “recursive case”).\n\n\n# Exercise: knapsack\n\nLlm Evaluation ist für diese Aufgabe deaktiviert. Entferne die .llmignore Datei vom Package der Aufgabe.\n\n\n# Exercise: sudoku\n\n### Correctness\n- `Sudoku.main` hat nicht die erwartete Signatur `public static void main(String[] args)`; so startet das Programm/GUI typischerweise nicht über den Java-Entry-Point.\n- In `SudokuSolverImpl.solved(...)` wird das Ergebnis der rekursiven Aufrufe ignoriert (du rufst `solved(model, fieldNr + 1)` auf, verwendest den Rückgabewert aber nicht), dadurch wird kein “found”-Zustand korrekt nach oben propagiert.\n- Beim Backtracking in `solved(...)` fehlt das Zurücksetzen (clearen) eines Feldes, wenn ein gesetzter Wert nicht zu einer Lösung führt; dadurch bleibt das Modell in einem falschen Zustand und kann auch bei “kein Lösung”-Pfad nicht sauber zurückgebaut werden.\n- `solved(...)` gibt am Ende `checker.allOK(model) && fieldNr >= ...` zurück; das erfüllt die Anforderung “false: no solution found, model was reset to its initial state” nicht, weil das Modell bei Fehlschlag nicht wieder im Ausgangszustand ist.\n- In `solved(...)` verwendest du fest `9` und `10` (z.B. `row = fieldNr / 9`, Schleife `x < 10`) statt `model.size()`. Das verletzt die Idee der Abstraktion über `SudokuModel.size()` (auch wenn es hier zufällig 9 ist).\n- `nofSolutions(...)` ist nicht implementiert und liefert immer `0`, damit wird die Anforderung “Anzahl Lösungen zählen (mit Abbruch bei MAX)” nicht erfüllt.\n\n### Suggestion\n- Schau dir an, wie du beim rekursiven Lösen einen Boolean “Lösung gefunden” nach oben weiterreichst: Wenn ein tieferer rekursiver Aufruf `true` liefert, solltest du die weiteren Versuche abbrechen und dieses `true` zurückgeben.\n- Für korrektes Backtracking brauchst du einen Schritt “Undo”: Wenn ein getesteter Wert nicht zu einer Lösung führt, muss das Feld wieder geleert werden, bevor du den nächsten Wert probierst bzw. bevor du zur vorherigen Rekursionsebene zurückgehst.\n- Überlege dir eine klare Verankerung (Base Case): “alle Felder verarbeitet” sollte direkt `true` (bei solved) bzw. `1` (bei nofSolutions) bedeuten, ohne nochmal global `allOK` zu prüfen (die Teilprüfungen beim Setzen übernehmen das normalerweise schon).\n- Ersetze die “9/10”-Konstanten durch `model.size()` (und ggf. `model.size() * model.size()`), damit deine Index-Rechnung und Werteschleife konsistent zum Modell bleibt.\n- Für `nofSolutions`: Denke wie beim Lösen, aber statt beim ersten Fund aufzuhören, addierst du die Anzahl Lösungen aus den rekursiven Aufrufen; und du brauchst eine Abbruchbedingung, sobald `MAX` erreicht ist (z.B. über ein verbleibendes “Budget” das du nach unten weitergibst).\n\n### Code Style\n- Vermeide Magic Numbers (`9`, `10`) und nutze konsequent `model.size()`; das macht den Code leichter wartbar und weniger fehleranfällig.\n- Die Kommentare sind teils hilfreich, aber achte darauf, dass sie das tatsächliche Verhalten beschreiben (aktuell steht z.B. sinngemäß “wenn alle Felder behandelt wurden … return true”, im Code wird aber `allOK` geprüft und die Rekursionsergebnisse werden nicht genutzt).\n\n\n# Exercise: queens\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
} ]
}
}