{
"llm" : {
"feedback" : "# Exercise: fractal\n\n### Correctness\n- In `Boxes.drawRec` zeichnest du bei jedem Rekursionsschritt ein Rechteck und brichst erst bei `n < 0` ab; dadurch wird auch für `n == 0` noch weiter rekursiv gezeichnet (bis `n` negativ wird) und es entstehen deutlich mehr Rechtecke als für Rekursionstiefe `n` gefordert.\n- In `Boxes.drawRec` fehlt der rekursive Aufruf für die unten-links-Box (du zeichnest nur oben-links, oben-rechts, unten-rechts).\n- In `Triangles.drawRec` zeichnest du das Dreieck in jedem Rekursionsschritt und brichst erst bei `n < 0` ab; dadurch wird auch hier tiefer rekursiv gezeichnet als durch `n` vorgegeben (bei `n == 0` wird weiter in die Tiefe gegangen).\n- In `Triangles.drawRec` sind die Punkte der rekursiven Teil-Dreiecke teils nicht die richtigen Mittelpunkte der Kanten des aktuellen Dreiecks (z.B. verwendest du mehrfach `x0, y1` als „Eckpunkt“, obwohl das kein berechneter Mittelpunkt aus den aktuellen Koordinaten ist), wodurch die Unterteilung geometrisch nicht dem gewünschten Fraktal entspricht.\n\n### Suggestion\n- Überlege dir für beide Formen einen klaren **Basisfall**: Bei welcher `n`-Zahl soll *nur* die aktuelle Form gezeichnet werden und **keine** weiteren rekursiven Aufrufe passieren?\n- Prüfe in `Boxes`, welche **vier Quadranten** bei `n > 0` entstehen sollten (oben-links, oben-rechts, unten-links, unten-rechts) und ob du wirklich alle vier ansteuerst.\n- Für die Dreiecke: Berechne zuerst konsequent die **drei Mittelpunkte** der Kanten `(x0,y0)-(x1,y1)`, `(x0,y0)-(x2,y2)` und `(x1,y1)-(x2,y2)` und verwende dann genau diese drei Punkte, um die drei kleineren Dreiecke aufzuspannen (statt feste Mischpunkte wie `(x0, y1)` zu verwenden).\n- Kontrolliere bei den rekursiven Aufrufen, dass du jeweils wieder ein echtes Dreieck mit den richtigen drei Eckpunkten übergibst (und nicht versehentlich Punkte, die gar nicht auf dem aktuellen Dreieck liegen).\n\n### Code Style\n- Die Kommentare `// TODO implement` sind nach der Implementierung irreführend; entferne oder ersetze sie durch eine kurze Beschreibung der Logik.\n- In beiden Klassen ist `if (n < 0) return;` ungewöhnlich für Rekursionstiefe; ein klar benannter Basisfall (z.B. „bei n == 0“) macht den Code leichter verständlich.\n- In `Triangles` ist eine auskommentierte Zeile (`//drawRec(...)`) übrig geblieben; solche Reste besser entfernen, sobald du dich für eine Variante entschieden hast.\n\n\n# Exercise: knapsack\n\n### Correctness\n- Du berücksichtigst `maxN` nicht: In `pack` wird ein Gegenstand höchstens einmal eingeladen (`loadItem(i)` genau einmal), gefordert ist aber, dass jeder Gegenstand bis zu `n`-mal mitgenommen werden kann.\n- Durch das fehlende `maxN`-Handling ist auch `unloadItem(i)` logisch nicht passend für den „n-mal“-Fall: du machst nur einen Schritt zurück, obwohl du im „n-mal“-Problem ggf. mehrere Kopien eines Items wieder entfernen müsstest.\n\n### Suggestion\n- Überlege dir in `pack(i)`, wie du für ein Item `i` nicht nur „0 oder 1“, sondern „0 bis maxN“ Kopien durchprobieren kannst, bevor du zu `i+1` weitergehst (z.B. eine Schleife über die Anzahl Kopien).\n- Wenn du mehrere Kopien eines Items nacheinander einlädst, brauchst du am Ende auch eine passende „Aufräum“-Logik, die genau die Anzahl wieder entfernt, die du in diesem Zweig hinzugefügt hast (nicht nur eine).\n\n### Code Style\n- Die Kommentare enthalten viele „TODO implement“/Fragen gemischt mit Erklärungstext; entscheide dich lieber für kurze, klare Kommentare oder entferne erledigte TODOs, damit der Code leichter lesbar bleibt.\n- `KnapsackN.main()` hat nicht die übliche Signatur `main(String[] args)`; falls eure Tests/Runner das erwarten, kann das verwirren (auch wenn es evtl. hier nicht geprüft wird).\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: <174>"
}, {
"name" : "random2()",
"status" : "FAILED",
"message" : "expected: <340> but was: <279>"
}, {
"name" : "random3()",
"status" : "FAILED",
"message" : "expected: <558> but was: <357>"
}, {
"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
} ]
}
}