{
"llm" : {
"feedback" : "# Exercise: wordmutations\n\n### Correctness\n- Es fehlt komplett eine Implementierung (kein `WordMutants`-Programm, keine Startpopulation, keine Mutations-/Generationen-Schleife, kein Beschränken der Population, kein „Überleben“-Filter nach Kriterien).\n\n### Suggestion\n- Fang mit einem minimal lauffähigen `WordMutants` an, das zuerst nur die Startpopulation als `ArrayList<String>` anlegt und ausgibt; danach Schritt für Schritt erweitern.\n- Baue dann die Generationsschleife (z. B. 10 Durchläufe) und darin die 20 Fortpflanzungen: jedes Mal zwei zufällige Wörter wählen und an einer zufälligen Stelle „DNA“ trennen und neu kombinieren.\n- Danach direkt am Ende jeder Generation die Population wieder auf 40 begrenzen, indem du zufällig Elemente entfernst, bis die Zielgröße erreicht ist.\n- Als letzten Schritt einen Filter einbauen: erst mal ein einfaches Kriterium (z. B. Wortlänge in einem Bereich), bevor du komplexere Regeln wie „nicht zu viele Vokale hintereinander“ ausprobierst.\n\n3. Code Style\n\n\n# Exercise: eratosthenes\n\n### Correctness\n- Deine Methode gibt immer eine leere Liste zurück und liefert damit keine Primzahlen für `n`.\n- Das Sieb des Eratosthenes wird aktuell gar nicht implementiert, obwohl die Aufgabe explizit dieses Verfahren verlangt.\n- Die Rückgabe muss alle Primzahlen **kleiner als `n`** enthalten (z.B. bei `n = 100` die im Text aufgeführten Werte); das wird so nicht erfüllt.\n\n### Suggestion\n- Baue zunächst eine Datenstruktur auf, die für alle Zahlen von `2` bis `n-1` speichert, ob sie noch “nicht gestrichen” sind.\n- Iteriere dann über mögliche Primkandidaten und streiche jeweils deren Vielfache, beginnend beim Quadrat des Kandidaten, bis du bei `n` ankommst.\n- Sammle am Ende alle nicht gestrichenen Zahlen in eine `ArrayList<Integer>` in aufsteigender Reihenfolge und gib diese zurück.\n\n### Code Style\n- Der `TODO`-Kommentar ist noch nicht umgesetzt; entferne ihn, sobald du die Logik implementiert hast.\n- Aktuell enthält die Methode nur ein Dummy-Return; das wirkt wie ein Platzhalter und erschwert das Testen, solange keine Teillogik vorhanden ist.\n\n\n# Exercise: pair\n\n1. Correctness \n- \n\n2. Suggestion \n- \n\n3. Code Style \n- `main.java` ist so, wie es hier steht, kein gültiges Java-File (eine `main`-Methode muss innerhalb einer Klasse stehen; außerdem sollte die Datei typischerweise zur Klassennamen-Konvention passen). \n- In `PairFinder.java` sind die Imports nicht ganz aufgeräumt: `HashSet` wird verwendet, aber du könntest konsistent entweder nur `HashSet` oder das Interface `Set` verwenden (und entsprechend importieren), statt “halb/halb” zu arbeiten. \n- Kleinigkeit zur Lesbarkeit: Achte auf konsistente Abstände (z.B. `reader =openFile(path)` → Leerzeichen nach `=`).\n",
"status" : "SUCCESS"
},
"unitTest" : {
"tests" : [ {
"name" : "eratosthenesShouldOnlyReturnPrimesLessThenN()",
"status" : "FAILED",
"message" : null
}, {
"name" : "eratosthenesShouldReturnPrimesOrderedAscending()",
"status" : "PASSED",
"message" : null
}, {
"name" : "eratosthenes100()",
"status" : "FAILED",
"message" : "expected: <[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]> but was: <[]>"
}, {
"name" : "eratosthenes1_000()",
"status" : "FAILED",
"message" : "expected: <168> but was: <0>"
}, {
"name" : "eratosthenes10_000()",
"status" : "FAILED",
"message" : "expected: <1229> but was: <0>"
}, {
"name" : "eratosthenes100_000()",
"status" : "FAILED",
"message" : "expected: <9592> but was: <0>"
}, {
"name" : "eratosthenes1_000_000()",
"status" : "FAILED",
"message" : "expected: <78498> but was: <0>"
}, {
"name" : "hasSumSmallFile()",
"status" : "PASSED",
"message" : null
}, {
"name" : "hasSumIntermediateFile()",
"status" : "PASSED",
"message" : null
}, {
"name" : "hasSumLargeFile()",
"status" : "PASSED",
"message" : null
} ]
}
}