{
"llm" : {
"feedback" : "# Exercise: fractal\n\n### Correctness\n- In `Boxes`, die rekursive Zeichenlogik (`drawRec`) ist nicht implementiert, dadurch wird keine Boxen-Fraktalform gezeichnet.\n- In `Triangles`, die rekursive Zeichenlogik (`drawRec`) ist nicht implementiert, dadurch wird keine Dreiecks-Fraktalform gezeichnet.\n\n### Suggestion\n- Für `Boxes`: Überlege dir eine **Abbruchbedingung** für `n` (z.B. wann du “nur noch” ein einzelnes Rechteck zeichnest) und was im **rekursiven Fall** passieren soll (typisch: Quadrat in kleinere Teilquadrate zerlegen und für diese mit `n-1` weiterzeichnen).\n- Für `Triangles`: Starte mit dem **Basisfall**: wenn `n` klein genug ist, zeichnest du genau ein Dreieck mit `g.drawLine(...)` (3 Linien). Im rekursiven Fall brauchst du dann aus den drei Eckpunkten die **Mittelpunkte der Kanten** (jeweils Durchschnitt der Koordinaten), um daraus die kleineren Dreiecke zu definieren und mit `n-1` weiterzugehen.\n\n### Code Style\n- In `Boxes.drawRec` steht noch ein `// TODO implement` ohne weitere Hinweise; ergänze wenigstens kurz, welche `Gui`-Methode du dort verwenden willst (in der Vorlage war z.B. der Hinweis auf `g.drawRect(...)`).\n- In `Triangles.drawRec` ist der Kommentar zwar hilfreich, aber es fehlt komplett die Struktur (Basisfall vs. rekursiver Fall). Ein kurzer Kommentarblock “base case / recursive case” würde die Lesbarkeit deutlich erhöhen.\n\n\n# Exercise: knapsack\n\n### Correctness\n- In `pack(int i)` fehlt der Fall, dass du einen Gegenstand **0-mal** nimmst, wenn `currWeight > maxWeight` schon passiert ist: Dann brichst du komplett ab, obwohl es (für spätere Items) noch Kombinationen geben könnte, bei denen das aktuelle Item einfach nicht genommen wird. (Bei dir wird `pack(i+1)` nur im `else if (currWeight <= maxWeight)`-Zweig aufgerufen.)\n- Deine Schleifenstruktur ruft `pack(i + 1)` pro `amount` zweimal auf (einmal vor dem Laden, einmal nach dem Laden). Dadurch werden einige Kombinationen mehrfach/unnötig traversiert und andere Pfade werden nicht so klar getrennt nach “0..maxN Stück”. Das kann dazu führen, dass die Rekursion nicht exakt alle Kombinationen in der erwarteten Systematik abdeckt.\n\n### Suggestion\n- Überlege dir eine saubere Rekursionsstruktur nach dem Muster: “für Item i probiere k = 0..maxN Stück, dann gehe zu i+1”. Damit stellst du sicher, dass “0 Stück” immer möglich ist – auch wenn du gerade über dem Gewichtslimit bist, solltest du wenigstens noch den Pfad “nimm dieses Item nicht” korrekt behandeln (bzw. Übergewicht früh abbrechen, aber nicht das Prinzip ‘0 Stück’ vergessen).\n- Prüfe, ob du wirklich zwei `pack(i+1)`-Aufrufe pro `amount` brauchst. Oft reicht: erst eine Anzahl wählen (0..maxN), Zustand entsprechend ändern, **genau einmal** rekursiv weitergehen, danach Zustand zurücksetzen.\n- Wenn du nach dem Laden wieder entlädst: achte darauf, dass der Zustand nach jedem getesteten `k` wieder exakt so ist wie davor (Backtracking-Invariante). Eine einfache Kontrolle ist, vor und nach dem Block `currWeight/currValue` zu vergleichen.\n\n### Code Style\n- In `loadItem`/`unloadItem` stehen noch `// TODO implement` Kommentare, obwohl die Methoden implementiert sind – das ist irreführend und sollte entfernt werden.\n- `amount`, `x` sind sehr generische Namen; bei Backtracking hilft ein Name wie `count`/`k` für die Anzahl, um die Logik besser nachvollziehen zu können.\n- `KnapsackN.main()` hat nicht die übliche Java-Signatur `main(String[] args)`; je nach Test-/Runner-Setup kann das problematisch sein (auch wenn es evtl. in eurer Vorlage toleriert 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" : "PASSED",
"message" : null
}, {
"name" : "random2()",
"status" : "PASSED",
"message" : null
}, {
"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
} ]
}
}