{
"llm" : {
"feedback" : "# Exercise: fractal\n\n### Correctness\n- In `Boxes`, die rekursive Zeichenmethode `drawRec(...)` ist nicht implementiert, dadurch wird gar nichts gezeichnet.\n- In `Triangles`, die rekursive Zeichenmethode `drawRec(...)` ist nicht implementiert, dadurch wird gar nichts gezeichnet.\n\n### Suggestion\n- Für `Boxes.drawRec(...)`: Überlege dir einen klaren Abbruchfall (z.B. bei `n == 0`), in dem du genau ein Quadrat/Rechteck zeichnest, und einen Rekursionsfall, in dem du das Quadrat in kleinere Teilquadrate aufteilst und für diese mit `n - 1` weiterzeichnest.\n- Für `Triangles.drawRec(...)`: Baue ebenfalls einen Abbruchfall (z.B. `n == 0`), der genau ein Dreieck über drei Linien zeichnet, und im Rekursionsfall berechnest du die Mittelpunkte der Dreiecksseiten, um daraus die kleineren Dreiecke zu konstruieren, die du dann rekursiv zeichnest.\n\n### Code Style\n- In `Boxes.drawRec(...)` und `Triangles.drawRec(...)` stehen noch `TODO`-Platzhalter ohne jede Implementationsskizze; wenn du schon anfängst, helfen zumindest kurze Kommentare zu Abbruchfall/Rekursionsfall und zu den geplanten Teilformen.\n\n\n# Exercise: knapsack\n\n### Correctness\n- Deine `pack`-Logik berücksichtigt nicht alle erlaubten Anzahlen eines Items von `0..maxN`: Durch `loadItem(i, amount)` mit dem jeweils aktuellen `amount` addierst du nicht “ein weiteres Exemplar”, sondern addierst beim nächsten Schleifendurchlauf einen größeren Sprung (z.B. erst `+0`, dann `+1*value`, dann `+2*value`), wodurch Kombinationen effektiv falsch gezählt/übersprungen werden.\n- Durch das sofortige `unloadItem(i, amount)` nach dem rekursiven Aufruf bleibt der Zustand zwar “sauber”, aber weil du nie den Zustand “genau k Exemplare bereits im Rucksack” korrekt aufbaust (sondern sprunghaft), stimmen die rekursiv untersuchten Zustände nicht mit den beabsichtigten Konfigurationen überein.\n- Die Signaturen von `loadItem`/`unloadItem` entsprechen nicht der vorgegebenen Vorlage (dort `loadItem(int i)` und `unloadItem(int i)`). Wenn die Tests/der Bewertungsrahmen diese Methoden direkt erwarten, kann das zu Testfehlschlägen führen, obwohl die Idee passt.\n\n### Suggestion\n- Überlege dir, ob du beim Durchprobieren von `n = 1..maxN` jeweils **immer genau ein weiteres** Exemplar hinzufügen solltest (inkrementell), statt “k Exemplare auf einmal” anhand von `amount` zu addieren.\n- Prüfe deine Schleife: Du willst die Fälle “0 Stück”, “1 Stück”, …, “maxN Stück” für ein Item systematisch abdecken. Ein guter Check ist, ob dein Zustand vor dem nächsten `n`-Fall wirklich “vorheriger Fall + 1 Exemplar” ist.\n- Halte dich an die vorgegebenen Methodensignaturen und nutze die Rekursion/Schleife so, dass `loadItem(i)`/`unloadItem(i)` ohne Zusatzparameter funktionieren; die Anzahl kannst du über die Anzahl Aufrufe oder einen separaten Zähler im `pack`-Ablauf steuern.\n\n### Code Style\n- Entferne die `// TODO implement` Kommentare in `loadItem`/`unloadItem`, da du dort bereits implementiert hast.\n- `amount` als Parameter in `loadItem/unloadItem` macht die Zustandsänderungen schwer nachvollziehbar (weil es nicht “ein Item laden/entladen” ausdrückt); für Lesbarkeit wäre eine klarere Trennung zwischen “ein Exemplar laden” und “am Ende alles wieder rückgängig machen” hilfreicher.\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" : "PASSED",
"message" : null
}, {
"name" : "random2()",
"status" : "FAILED",
"message" : "expected: <340> but was: <334>"
}, {
"name" : "random3()",
"status" : "PASSED",
"message" : null
}, {
"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
} ]
}
}