{
"llm" : {
"feedback" : "# Exercise: fractal\n\n### Correctness\n- In `Boxes` ist `drawRec(...)` nicht implementiert; damit wird keine rekursive Box-Fraktalform gezeichnet.\n- In `Triangles` ist `drawRec(...)` nicht implementiert; damit wird keine rekursive Dreiecksform gezeichnet.\n\n### Suggestion\n- Für `Boxes.drawRec(...)`: Überlege dir einen klaren Abbruchfall für `n` (z.B. wann wirklich ein Rechteck gezeichnet wird) und was im Rekursionsfall passieren muss (welche Teil-Rechtecke, mit welchen Koordinaten/Grössen, und mit welchem `n-1`).\n- Für `Triangles.drawRec(...)`: Definiere zuerst den Basisfall (ein einzelnes Dreieck mit 3 Linien). Für den Rekursionsfall hilft es, die Mittelpunkte der Dreiecksseiten zu berechnen und daraus die 3 kleineren Teil-Dreiecke abzuleiten, die du dann rekursiv zeichnest.\n\n### Code Style\n- In `Boxes.drawRec(...)` und `Triangles.drawRec(...)` stehen noch `TODO`-Kommentare; sobald du implementierst, entferne/ersetze sie durch kurze, erklärende 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- `SudokuSolverImpl.solved(...)` hat keine korrekte Abbruchbedingung für `fieldNr == size*size`; stattdessen rufst du am Anfang immer `solved(model, fieldNr + 1)` auf, was irgendwann über das letzte Feld hinausläuft (endlose Rekursion/StackOverflow).\n- `solved(...)` erfüllt die Anforderung „false: no solution found, model was reset to its initial state“ nicht: bei einem Fehlschlag werden gesetzte Werte nicht zuverlässig wieder gelöscht (kein konsequentes Backtracking/Clearing).\n- In `solved(...)` wird ein gesetzter Wert ausprobiert, aber das Ergebnis des rekursiven Aufrufs wird in der Schleife nicht genutzt, um frühzeitig zu stoppen bzw. einen gefundenen Zustand nach oben zurückzugeben; dadurch kann trotz gefundener Lösung weiter überschrieben werden.\n- `solved(...)` verwendet am Ende `checker.allOK(model)` als Erfolgskriterium zusammen mit `fieldNr >= ...`; das prüft nicht sauber „Sudoku vollständig gelöst“ (vollständig gefüllt) und ist durch dein Rekursionsverhalten ohnehin nicht erreichbar/zuverlässig.\n- `nofSolutions(...)` ist nicht implementiert und gibt immer `0` zurück.\n- `Sudoku.main()` ist nicht als `public static void main(String[] args)` definiert; so startet die Applikation typischerweise nicht über den Java-Entry-Point.\n\n### Suggestion\n- Baue zuerst eine klare Verankerung ein: Überlege dir, was exakt passieren soll, wenn `fieldNr` das letzte Feld „hinter“ dem Sudoku erreicht (das ist der natürliche Punkt, an dem du `true` zurückgeben kannst).\n- Achte darauf, dass du bei vordefinierten Feldern (≠ 0) einfach zum nächsten Feld weitergehst, ohne neue Werte zu setzen.\n- Beim Probieren von Werten: Nutze den Rückgabewert des rekursiven Aufrufs, um sofort abzubrechen, sobald eine Lösung gefunden wurde, und gib dieses `true` nach oben weiter.\n- Für das Zurücksetzen bei Fehlschlag: Überlege dir, an welcher Stelle du ein Feld wieder `clear(...)`en musst, wenn keiner der getesteten Werte zum Ziel führt.\n- Für `nofSolutions(...)`: Denk analog zu `solved`, nur dass du statt „gefunden ja/nein“ die Anzahl Lösungen aufsummierst; wichtig ist dabei auch die MAX-Grenze (du musst also irgendwann abbrechen, wenn du genug gezählt hast) und am Ende den Modellzustand wieder herstellen (Backtracking).\n- Passe die Signatur von `main` an die Java-Konvention an, damit dein Programm tatsächlich startbar ist.\n\n### Code Style\n- In `solved(...)` sind Magic Numbers (`9`, `10`) hart codiert; verwende stattdessen `model.size()` (macht den Code konsistent mit dem Interface).\n- Die Logik in `solved(...)` ist durch verschachtelte `if/else` und den frühen rekursiven Aufruf schwer nachvollziehbar; versuche eine klarere Struktur (erst Abbruchbedingung, dann Fall „vordefiniert“, dann Fall „leer“) zu wählen.\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
} ]
}
}