{
"llm" : {
"feedback" : "# Exercise: prime\n\n### Correctness\n- `isPrime` gibt momentan immer `false` zurück und prüft `x` nicht; damit werden Primzahlen nicht als solche erkannt.\n- Es fehlt die geforderte sequenzielle Suche nach einem Teiler `t` mit `1 < t < x`, der `x modulo t == 0` erfüllt.\n\n### Suggestion\n- Überlege dir, welche Werte für `t` du der Reihe nach testen musst, um sicher festzustellen, ob ein Teiler existiert (Startwert, Endbedingung, Schrittweite).\n- Baue eine Schleife, die bei einem gefundenen Teiler sofort abbrechen kann (dann ist `x` nicht prim); wenn kein Teiler gefunden wird, ist `x` prim.\n- Denke daran, wie du den Fall behandelst, dass `x` nicht größer als 1 ist, auch wenn in der Aufgabenbeschreibung `x > 1` steht (Unit-Tests prüfen solche Randfälle manchmal trotzdem).\n\n### Code Style\n- Der Kommentar `// TODO: implement exercise for dividing number` ist sehr vage; formuliere ihn konkreter (z.B. was genau die Schleife prüfen soll) oder entferne ihn nach der Implementierung.\n\n\n# Exercise: binsearchfirst\n\n### Correctness\n- `binSearch` ist nicht implementiert und gibt immer `0` zurück, erfüllt damit weder die Suche nach vorhandenen Werten noch das Finden des ersten Vorkommens bei Duplikaten.\n- Der Fall „Wert nicht enthalten → Einfügeposition gemäß Sortierung“ wird nicht umgesetzt (z.B. sollte bei `42` die Position `data.length` herauskommen, nicht `0`).\n- Die Anforderung „immer den ersten (kleinsten Index)“ bei mehrfach vorhandenen Werten wird nicht berücksichtigt.\n\n### Suggestion\n- Starte mit zwei Grenzen (links/rechts) und überlege dir eine Schleifeninvariante, die am Ende direkt die Einfügeposition liefert (das ist oft genau die gesuchte Antwort).\n- Passe die Fallunterscheidung so an, dass bei `data[mid] == value` nicht sofort zurückgegeben wird, sondern weiter nach links gesucht wird, bis du sicher bist, dass es keinen kleineren Index mit demselben Wert gibt.\n- Teste gedanklich an den Beispielen `24` (mehrfach vorhanden) und `17` (nicht vorhanden), ob deine Grenzen am Ende auf der korrekten Einfügeposition landen.\n\n### Code Style\n- Der TODO-Kommentar ist ok, aber sobald implementiert: wähle sprechende Variablennamen für die Grenzen (z.B. nicht nur `i/j`), damit klar wird, welche Seite was bedeutet.\n- Aktuell ist die Methode nur ein Platzhalter; unnötige Rückgabe-Konstante (`return 0;`) sollte nach der Implementierung verschwinden.\n\n\n# Exercise: tripleseqsearch\n\n### Correctness\n- Wenn keine `7` im Array vorkommt, erhöhst du `i` nach der ersten Suche trotzdem noch einmal (`i++`) und suchst dann nach einer negativen Zahl. Dadurch kann die Methode fälschlicherweise `true` liefern, obwohl nie eine `7` gefunden wurde.\n- Wenn die negative Zahl an letzter Stelle steht, machst du danach ein `i++` und überspringst damit das Ende; dadurch kann es sein, dass du die „gerade Zahl nach der negativen Zahl“ nicht korrekt prüfen kannst (du suchst dann effektiv erst *nach* dem Element hinter der negativen Zahl, das es gar nicht gibt).\n- Analog: Wenn die `7` an letzter Stelle steht, erhöhst du `i` und startest die nächste Suche außerhalb des Arrays; die Logik sollte klar entscheiden, dass dann keine vollständige Sequenz mehr möglich ist.\n\n### Suggestion\n- Prüfe nach jeder Such-Phase (nach `7` und nach der negativen Zahl), ob du überhaupt etwas gefunden hast, bevor du den Index weiter erhöhst und in der nächsten Phase weitersuchst.\n- Überlege dir: „Wo soll die nächste Suche starten?“ — typischerweise direkt *nach* dem gefundenen Index. Das heißt, du brauchst den Index des gefundenen Elements zuverlässig und solltest nur dann „+1“ machen, wenn das Element wirklich gefunden wurde.\n- Teste gezielt Grenzfälle: kein `7` vorhanden; `7` ganz am Ende; negative Zahl ganz am Ende; Array mit Länge 0/1/2. Schau, ob dein aktuelles `i++`-Schema dabei die beabsichtigte Reihenfolge wirklich erzwingt.\n\n### Code Style\n- Die `// TODO`-Kommentarzeile ist nicht mehr passend, weil du schon implementiert hast; entweder entfernen oder durch einen beschreibenden Kommentar zur Logik ersetzen.\n- Die „Magic Number“ `7` ist im Code hart kodiert; eine benannte Konstante (z.B. `TARGET = 7`) macht die Absicht klarer.\n- Mehrfaches `i++` zwischen den Schleifen ist etwas fehleranfällig/unklar; lesbarer wäre es, den Startindex der nächsten Suche explizit aus dem gefundenen Index abzuleiten (z.B. durch klare Zwischenvariablen oder eine Strukturierung in logisch benannte Schritte).\n\n\n# Exercise: sqrt\n\n### Correctness\n- Die Methode `squareRoot(double x)` ist nicht implementiert und gibt immer `0` zurück; damit wird die Quadratwurzel für praktisch alle Eingaben nicht korrekt berechnet.\n- Die geforderte binäre Suche mit unteren/oberen Grenzen (`low`, `high`), Berechnung von `mid` und dem Abbruchkriterium „keine darstellbare Zahl mehr zwischen den Grenzen“ (`low == mid || high == mid`) fehlt vollständig.\n- Die geforderte Auswahl der besseren Näherung am Ende (Vergleich, ob `low*low` oder `high*high` näher an `x` liegt) ist nicht umgesetzt.\n\n### Suggestion\n- Starte damit, abhängig von `x` passende Startgrenzen zu setzen: für `x > 1` liegt die Wurzel zwischen `1` und `x`, für `0 < x < 1` zwischen `x` und `1`.\n- Implementiere die Schleife der binären Suche, indem du jedes Mal `mid = low/2 + high/2` berechnest und anhand von `mid*mid` entscheidest, ob `mid` als neue Unter- oder Obergrenze verwendet wird.\n- Verwende als Abbruch genau das Kriterium aus der Aufgabenbeschreibung (`low == mid || high == mid`), damit du aufhörst, wenn keine `double`-Zahl mehr dazwischen liegt.\n- Gib am Ende nicht einfach `mid` zurück, sondern entscheide zwischen `low` und `high`, indem du vergleichst, welches Quadrat näher bei `x` liegt.\n\n### Code Style\n- Der Kommentar `// TODO: Implement bisection for square root` ist in Ordnung, aber solange die Methode leer bleibt, wirkt er wie „liegen geblieben“; sobald du implementierst, ersetze ihn durch kurze, erklärende Kommentare zu den Schritten (Grenzen setzen, Update-Regel, Abbruch, Ergebniswahl).\n",
"status" : "SUCCESS"
},
"unitTest" : {
"tests" : [ {
"name" : "testTooSmallInteger()",
"status" : "PASSED",
"message" : null
}, {
"name" : "testTooLargeInteger()",
"status" : "FAILED",
"message" : "expected: <5> but was: <0>"
}, {
"name" : "testZeroLengthArray()",
"status" : "PASSED",
"message" : null
}, {
"name" : "testNonExistingInteger()",
"status" : "FAILED",
"message" : "expected: <4> but was: <0>"
}, {
"name" : "testEqualInteger()",
"status" : "FAILED",
"message" : "expected: <11> but was: <0>"
} ]
}
}