{
"llm" : {
"feedback" : "# Exercise: fractal\n\n### Correctness\n- In `Boxes`, die rekursive Zeichenmethode `drawRec(...)` ist nicht implementiert, dadurch wird keine Box/kein Fraktal gezeichnet.\n- In `Triangles`, die rekursive Zeichenmethode `drawRec(...)` ist nicht implementiert, dadurch wird kein Dreiecks-Fraktal gezeichnet.\n\n### Suggestion\n- Für `Boxes.drawRec(...)`: Überlege dir eine klare **Abbruchbedingung** für `n` (z.B. wann wirklich ein Quadrat gezeichnet wird) und was im **Rekursionsfall** passiert (Aufteilen der aktuellen Fläche in kleinere Teilquadrate mit angepassten `x/y`-Koordinaten und kleinerer Seitenlänge).\n- Für `Triangles.drawRec(...)`: Definiere ebenfalls eine **Basis** (bei welcher Rekursionstiefe du genau die 3 Linien des Dreiecks zeichnest) und berechne im Rekursionsschritt die **Mittelpunkte** der Dreiecksseiten, um daraus die kleineren Teildreiecke zu bilden, die du dann rekursiv weiterzeichnest.\n\n### Code Style\n- Die `// TODO implement`-Stellen sind noch offen; solange das nicht umgesetzt ist, wirkt der Code “fertig”, compiliert zwar, erfüllt aber die Aufgabe nicht.\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 korrekte Signatur (muss `public static void main(String[] args)` sein), sonst startet das Programm/GUI nicht.\n- `solved(...)` erfüllt die Anforderung „false: no solution found, model was reset to its initial state“ nicht: du setzt Werte, aber beim Scheitern werden die Felder nicht zuverlässig wieder geleert (Backtracking/Undo fehlt).\n- In `solved(...)` ignorierst du das Rückgabe-Resultat der rekursiven Aufrufe: du rufst `solved(model, fieldNr + 1)` auf, nutzt aber das Ergebnis nicht, d.h. du brichst nicht ab, wenn eine Lösung gefunden wurde.\n- In `solved(...)` probierst du für ein leeres Feld zwar Werte durch, aber wenn ein Wert nicht zur Lösung führt, wird das Feld vor dem nächsten Versuch nicht wieder auf „leer“ gesetzt; dadurch bleibt häufig ein falscher Wert stehen.\n- `solved(...)` gibt am Ende `checker.allOK(model)` zurück; das ist nicht gleichbedeutend mit „Sudoku vollständig gelöst“ (ein teilweise gefülltes, konfliktfreies Sudoku wäre dann fälschlich `true`).\n- `nofSolutions(...)` ist nicht implementiert und gibt immer `0` zurück.\n\n### Suggestion\n- Schau dir zuerst die Programmstart-Methode an: Welche exakte `main`-Signatur erwartet Java, damit dein GUI überhaupt laufen kann?\n- Für Backtracking brauchst du eine klare Verankerung (alle Felder verarbeitet) und musst ab diesem Punkt „Erfolg“ nach oben zurückmelden; überlege dir, wie du dieses `true/false` aus der Rekursion direkt verwendest, um Schleifen früh zu beenden.\n- Beim Durchprobieren eines Werts in einem Feld: was muss passieren, wenn der Wert zwar lokal gültig ist (`oneOK`), aber die Rekursion später scheitert? (Stichwort: Feld wieder leeren, bevor du den nächsten Wert testest.)\n- Überlege, ob „keine Konflikte“ wirklich reicht, um „gelöst“ zu sein, oder ob du zusätzlich sicherstellen musst, dass du tatsächlich am Ende des Feld-Index angekommen bist.\n- Für `nofSolutions`: denke in derselben Rekursionsstruktur wie bei `solved`, aber statt beim ersten Fund aufzuhören, addierst du Treffer; und du musst trotzdem nach jedem Versuch den Zustand wieder zurücksetzen sowie bei `MAX` abbrechen.\n\n### Code Style\n- In `solved(...)` verwendest du feste Zahlen (`9`, `10`) statt `model.size()`; das macht die Lösung unnötig unflexibel.\n- `this.checker...` ist nicht falsch, aber inkonsistent verwendet; einheitlich halten (mit oder ohne `this`).\n- In `solved(...)` sind `row`/`column` einmal aus `fieldNr` berechnet, aber die Abbruchbedingung nutzt `model.size()`; auch hier wäre durchgehend `model.size()` (statt 9) konsistenter und besser wartbar.\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
} ]
}
}