{
"llm" : {
"feedback" : "Exercise: fractal\n\n1. Correctness\n- Du hast die beiden geforderten `draw`-Implementationen nicht umgesetzt: In `Boxes.drawRec(...)` und `Triangles.drawRec(...)` steht noch `// TODO implement`, damit wird nichts gezeichnet und die Aufgabe ist nicht erfüllt.\n\n2. Suggestion\n- Implementiere in beiden `drawRec`-Methoden zuerst den Rekursionsabbruch über `n` (z.B. bei `n == 0` nicht weiter unterteilen), und zeichne in jedem Rekursionsschritt die aktuelle Grundform (bei Boxes ein Rechteck, bei Triangles die drei Kanten).\n- Für `Boxes`: Überlege dir, wie du aus `(x, y, s)` die Positionen/Grössen der kleineren Quadrate berechnest (typisch: `s` verkleinern und an mehrere Ecken/Teilpositionen weiterrekursieren).\n- Für `Triangles`: Zeichne aus den drei Punkten `(x0,y0)`, `(x1,y1)`, `(x2,y2)` zunächst das Dreieck mit drei `drawLine`-Aufrufen, und berechne dann für die Rekursion die neuen Dreiecke (oft über Mittelpunkte der Kanten) und rufe `drawRec` mit `n-1` auf.\n\n3. Code Style\n- In beiden Klassen sind die TODO-Kommentare stehen geblieben; sobald du implementierst, entferne/ersetze sie durch kurze, beschreibende Kommentare (z.B. “Rekursionsabbruch” / “Unterteilung in Teilformen”), damit klar ist, was in welchem Block passiert.\n\n\nExercise: knapsack\n\n1. Correctness\n\n\n2. Suggestion\n\n\n3. Code Style\n- In deinem Commit ist kein eigener Kommentar/Antwort zur geforderten Komplexitätsklasse enthalten; falls das Teil der Abgabe ist (z.B. im Readme/Kommentar), solltest du das dort noch festhalten.\n\n\nExercise: queens\n\n### 1. Correctness\n- Die Methode `solve()` ist nicht implementiert und liefert immer `false`, dadurch wird nie eine Lösung auf dem Board platziert.\n- Die Methode `count()` ist nicht implementiert und liefert immer `0`, dadurch wird die Anzahl der Lösungen nicht gezählt.\n\n### 2. Suggestion\n- Für `solve()`: Überlege dir eine rekursive Backtracking-Funktion, die zeilenweise (oder spaltenweise) jeweils genau eine Dame setzt, bei jedem Versuch `checkPlacement(...)` nutzt und bei einem Fehlschlag die gesetzte Dame wieder entfernt (Backtracking).\n- Für `count()`: Nutze eine sehr ähnliche Rekursion wie bei `solve()`, aber statt beim ersten Fund abzubrechen, zählst du jede vollständige Platzierung (Basisfall: alle Reihen belegt) und summierst die Ergebnisse der rekursiven Aufrufe.\n- Achte darauf, dass `solve()` am Ende ein Board-Zustand übrig lässt, der eine gefundene Lösung enthält (also nicht beim Zurückgehen alles wieder löschen, sobald du eine vollständige Lösung gefunden hast).\n\n### 3. Code Style\n- In `BoardPrinter.printLine`: `if (board[row][col] == true)` ist unnötig ausführlich; ein direkter boolean-Check ist üblicher und besser lesbar.\n\n\nExercise: sudoku\n\n1. Correctness\n- `solved(...)` ist nicht implementiert und liefert aktuell immer `false`, damit wird das Sudoku nie gelöst.\n- `nofSolutions(...)` ist nicht implementiert und liefert aktuell immer `0`, damit wird die Anzahl Lösungen nie korrekt gezählt.\n\n2. Suggestion\n- Für `solved`: Überlege dir eine rekursive Backtracking-Strategie, die Feld für Feld (z.B. über `fieldNr`) durchgeht, leere Felder mit Kandidaten `[1..size()]` belegt, nach jedem Setzen mit `checker.oneOK(...)` (oder passend) prüft und bei Misserfolg wieder zurücksetzt (`clear`), bis entweder alle Felder gültig gefüllt sind oder keine Zahl passt.\n- Für `nofSolutions`: Baue auf derselben Traversierung auf wie beim Lösen, aber statt beim ersten Fund abzubrechen, zählst du jede vollständige gültige Belegung als 1 Lösung und summierst über alle Verzweigungen; achte darauf, bei `max` frühzeitig abzubrechen, sobald du genug Lösungen gefunden hast, und nach dem Durchprobieren ein Feld wieder zu leeren (Backtracking), damit das Model am Ende wieder im Ausgangszustand ist.\n\n3. Code Style\n- In `SudokuSolverImpl` stehen noch `// TODO implement`-Platzhalter; sobald du implementierst, entferne die TODOs oder ersetze sie durch kurze, aussagekräftige Kommentare zur Backtracking-Idee.\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
} ]
}
}