{
"llm" : {
"feedback" : "# Exercise: fractal\n\n### Correctness\n- In `Boxes`, die rekursive Methode `drawRec(...)` ist nicht implementiert, dadurch werden keine Rechtecke gezeichnet.\n- In `Triangles`, die rekursive Methode `drawRec(...)` ist nicht implementiert, dadurch werden keine Dreiecke/Linien gezeichnet.\n- Damit sind die beiden geforderten `draw`-Implementationen in `Boxes` und `Triangles` nicht erfüllt.\n\n### Suggestion\n- Überlege dir für `Boxes.drawRec(...)` eine klare Abbruchbedingung (wann soll wirklich ein Quadrat gezeichnet werden?) und was im Rekursionsfall passieren muss (in wie viele Teilquadrate wird aufgeteilt, und welche Positionen bekommen diese?).\n- Achte bei `Boxes` darauf, dass du die Größe `s` passend verkleinerst und die neuen `x/y`-Koordinaten so wählst, dass die Teilquadrate in die vier Quadranten des aktuellen Quadrats passen.\n- Für `Triangles.drawRec(...)`: Definiere ebenfalls einen Basisfall, in dem du mit `g.drawLine(...)` die drei Kanten des aktuellen Dreiecks zeichnest.\n- Im Rekursionsfall bei `Triangles`: Bestimme die Mittelpunkte der Dreiecksseiten (z.B. jeweils Mittelwert der Endpunkt-Koordinaten) und rufe dann `drawRec(...)` für die entstehenden kleineren Dreiecke auf (mit `n-1`).\n\n### Code Style\n- In `Boxes.drawRec(...)` und `Triangles.drawRec(...)` stehen noch `// TODO implement`-Platzhalter; entferne/ersetze diese, sobald du implementiert hast, damit klar ist, dass die Aufgabe abgeschlossen ist.\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 geforderte Signatur `public static void main(String[] args)`, dadurch startet die Applikation typischerweise nicht.\n- `solved(...)` erfüllt die Spezifikation nicht zuverlässig: Wenn keine Lösung existiert, muss das Model auf den Anfangszustand zurückgesetzt werden; in deinem Backtracking werden gesetzte Werte nicht konsequent wieder gelöscht (kein sauberes Undo/Backtracking pro Feld).\n- In `solved(...)` wird das Ergebnis der rekursiven Aufrufe teilweise ignoriert (du rufst `solved(model, fieldNr + 1)` auf, aber nutzt den Rückgabewert nicht), dadurch wird nicht korrekt entschieden, wann abgebrochen/weitergesucht werden soll.\n- `solved(...)` kann auch dann `true` zurückgeben, wenn das Sudoku nicht vollständig gelöst ist (dein Rückgabewert am Ende prüft nur `rowOK` und `colOK` für das zuletzt betrachtete Feld, nicht “komplett gelöst”).\n- `nofSolutions(...)` ist nicht implementiert (gibt immer 0 zurück), damit ist eine Anforderung nicht erfüllt.\n- In `solved(...)` verwendest du fixe Grenzen (9, 10) statt `model.size()`, damit ist die Lösung nicht allgemein für andere Sudoku-Grössen im Framework.\n\n### Suggestion\n- Schau dir beim Backtracking an, was passieren muss, wenn ein gesetzter Wert später zu keiner Lösung führt: an genau dieser Stelle brauchst du ein “Rückgängigmachen” (clear) und ein korrektes Weiterprobieren des nächsten Werts.\n- Achte darauf, dass du bei der Rekursion den Rückgabewert verwendest: Wenn der rekursive Schritt “Lösung gefunden” meldet, solltest du diese Information nach oben durchreichen und nicht weiter Werte ausprobieren.\n- Überlege dir eine eindeutige Verankerung (Base Case): Was bedeutet “fertig” in Bezug auf `fieldNr` und was soll dann zurückgegeben werden?\n- Für das Zählen der Lösungen kannst du sehr ähnlich wie beim Lösen vorgehen, aber statt beim ersten Fund abzubrechen addierst du Treffer; gleichzeitig musst du bei `MAX` frühzeitig stoppen (z.B. wenn dein Zähler `>= max` wird).\n- Ersetze die fest codierten `9`/`10` durch `model.size()` (und nutze `size*size` für das Ende), damit dein Code mit dem Model-Vertrag übereinstimmt.\n\n### Code Style\n- Vermeide Magic Numbers (`9`, `10`) und nutze konsequent `model.size()`; das macht den Code lesbarer und weniger fehleranfällig.\n- Die Rückgabe am Ende von `solved(...)` ist schwer nachvollziehbar (Row/Col-Check des aktuellen Felds) und verschleiert die eigentliche Logik; versuch den Rückgabewert direkt aus dem Backtracking-Erfolg abzuleiten, statt “am Schluss irgendwas zu prüfen”.\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
} ]
}
}