AutoFeedback API

Result 4f004593-ddde-4db7-a642-d01a67d62c7a

{
  "llm" : {
    "feedback" : "# Exercise: wordmutations\n\n### Correctness\n- Es fehlt komplett ein Programm `WordMutants` (kein Code vorhanden), damit sind weder Startpopulation noch Mutations-/Generationenlogik umgesetzt.\n- Die verlangte Startpopulation als `ArrayList` mit Wörtern wird nicht erstellt.\n- Die Schleife über z. B. 10 Generationen mit jeweils 20 zufälligen Fortpflanzungen fehlt.\n- Das Einfügen der neu entstandenen Wörter in die Population fehlt.\n- Die Begrenzung der Population nach jeder Generation auf 40 Wörter (zufälliges Entfernen) fehlt.\n- Der zusätzliche Schritt mit „Überlebens“-Kriterien (Filter nach Regeln wie Wortlänge, Vokal/Konsonant-Verhältnis oder Folgen) fehlt.\n\n### Suggestion\n- Lege zuerst eine `ArrayList<String>` an und fülle sie mit den vorgegebenen Startwörtern, damit du überhaupt eine Population hast, aus der du auswählen kannst.\n- Plane die Generationslogik in zwei verschachtelten Schleifen: außen Generationen zählen, innen pro Generation die Anzahl Fortpflanzungen.\n- Für eine Fortpflanzung brauchst du zwei zufällig ausgewählte Wörter aus der Population und eine zufällige „Schnittstelle“ pro Wort (achte darauf, dass der Schnitt nicht immer am Rand liegt).\n- Baue das neue Wort aus einem Präfix des ersten und einem Suffix des zweiten Wortes zusammen und füge es danach der Population hinzu.\n- Nach jeder Generation reduzierst du die Population wieder: entferne so lange zufällige Elemente, bis nur noch 40 übrig sind.\n- Implementiere danach einen Filter-Schritt: entscheide dich für 1–2 Kriterien (z. B. min/max Länge oder max. Anzahl gleicher Typen hintereinander) und entferne Wörter, die diese Kriterien nicht erfüllen.\n\n### Code Style\n- Es gibt keinen Code; sobald du implementierst: trenne Logik in Methoden (z. B. „fortpflanzen“, „populationBegrenzen“, „ueberlebensFilter“), damit `main` übersichtlich bleibt.\n- Verwende sprechende Namen (z. B. `population`, `generation`, `offspring`) und halte „Magic Numbers“ (10, 20, 40) in Konstanten fest.\n\n\n# Exercise: eratosthenes\n\n### Correctness\n- Du gibst immer eine leere Liste zurück; damit werden keine Primzahlen bis `n` gefunden.\n- Die Methode implementiert das Sieb des Eratosthenes nicht (es werden keine Kandidaten erzeugt und keine Vielfachen gestrichen).\n- Die Rückgabe erfüllt damit nicht die Anforderung „alle Primzahlen kleiner als `n` in aufsteigend sortierter Liste“.\n\n### Suggestion\n- Erzeuge zuerst eine Struktur, die für alle Zahlen von 2 bis `n-1` festhält, ob sie noch „nicht gestrichen“ sind (z.B. boolean-Array oder eine Menge).\n- Starte bei der kleinsten nicht gestrichenen Zahl `p` (beginnend mit 2): diese ist prim; streiche dann alle Vielfachen von `p` ab `p*p` bis `< n`.\n- Wiederhole das nur solange `p*p < n`; danach sammle alle übrig gebliebenen (nicht gestrichenen) Zahlen in eine `ArrayList` in aufsteigender Reihenfolge und gib sie zurück.\n\n### Code Style\n- Der TODO-Kommentar ist noch unverändert; ersetze ihn durch eine kurze Beschreibung der konkreten Schritte oder entferne ihn nach der Implementierung.\n\n\n# Exercise: pair\n\n### Correctness\n\n\n### Suggestion\n\n\n### Code Style\n- Die Einrückung im `while`-Block ist inkonsistent (das `savedIntegers.add(i);` und `i = nextInt(reader);` wirken wie “versehentlich” extra eingerückt); formatiere den Block so, dass klar erkennbar ist, was zum `if` gehört und was immer ausgeführt wird.\n- Du hast Imports (`Files`, `Path`) in der Attempt-Datei, die du in `hasSum` nicht direkt verwendest (sie werden nur in `openFile` gebraucht, das zwar in derselben Klasse ist, aber die Imports sind trotzdem ok). Allgemein: achte darauf, nur benötigte Imports zu behalten, damit die Datei übersichtlicher bleibt.\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
    } ]
  }
}