{
"llm" : {
"feedback" : "Exercise: prime\n\n1. Correctness\n- `isPrime` ist nicht implementiert und gibt aktuell für jeden Input immer `false` zurück, dadurch werden Primzahlen nicht korrekt erkannt.\n\n2. Suggestion\n- Überlege dir eine Sequenz von Kandidaten `t`, die als Teiler in Frage kommen (beginnend bei `t > 1`) und prüfe systematisch, ob es ein `t` gibt, für das `x % t == 0` gilt; wenn du einen solchen Teiler findest, ist `x` nicht prim, andernfalls schon.\n- Achte dabei darauf, dass du nur `t` prüfst, die tatsächlich innerhalb der geforderten Grenzen liegen (`t < x`), und dass du die Suche frühzeitig abbrechen kannst, sobald ein Teiler gefunden wurde.\n\n3. Code Style\n- Der `TODO`-Kommentar ist noch vorhanden; entweder umsetzen oder nach der Implementierung entfernen.\n\n\nExercise: binsearchfirst\n\n### 1. Correctness\n- Die Methode `binSearch` gibt aktuell immer `0` zurück und führt keine binäre Suche aus, damit werden die geforderten Resultate (z.B. für 14 → 7, 24 → 10, 42 → 15) nicht erfüllt.\n- Es wird weder der *erste* Index bei mehrfach vorkommenden Werten gefunden noch die Einfügeposition zurückgegeben, falls der Wert nicht enthalten ist.\n\n### 2. Suggestion\n- Überlege dir eine binäre Suche-Variante, bei der du nicht „irgendein“ Treffer-Index zurückgibst, sondern die Grenze so verschiebst, dass am Ende die erste Position steht, an der `value` eingefügt werden könnte (das ist gleichzeitig der Index des ersten Vorkommens, falls vorhanden).\n- Achte in der Schleife besonders auf den Fall „Element ist gleich dem gesuchten Wert“: Wenn du den ersten Treffer willst, darfst du bei Gleichheit nicht einfach abbrechen, sondern musst weiterhin in der linken Hälfte weitersuchen.\n- Prüfe deine Abbruchbedingung (z.B. wann sich linker und rechter Suchbereich treffen) so, dass du am Ende direkt die gesuchte Einfüge-/Erstposition ablesen kannst.\n\n### 3. Code Style\n- Der `// TODO`-Kommentar ist ok als Platzhalter, aber solange keine Implementierung folgt, wirkt die Methode unvollständig; ersetze ihn durch die tatsächliche Logik oder beschreibe kurz die geplante Invariante (was links/rechts der Grenze gelten soll).\n\n\nExercise: tripleseqsearch\n\n1. Correctness\n- Deine Logik akzeptiert eine gerade Zahl auch dann, wenn sie **gleichzeitig negativ** ist (z.B. `-2`). In den Beispielen wird aber die Reihenfolge „7, negative Zahl, gerade Zahl“ als **drei getrennte Treffer in dieser Reihenfolge** verstanden; eine Zahl sollte nicht gleichzeitig den „negativ“- und den „gerade“-Teil erfüllen.\n- Durch dein `else if` kann der Fall nicht erkannt werden, in dem nach der ersten negativen Zahl noch einmal eine **spätere** negative Zahl kommt und erst danach eine gerade Zahl; je nach Verlauf kann das zu einer falschen Entscheidung führen, weil du Negativ-Treffer nicht unabhängig von der „gerade“-Prüfung behandelst.\n\n2. Suggestion\n- Überlege dir, ob die „gerade Zahl“ **nach** der negativen Zahl liegen muss und ob sie **zusätzlich** auch negativ sein darf oder nicht. Falls nicht: formuliere die Bedingung für den letzten Schritt so, dass „gerade“ nicht gleichzeitig den zweiten Schritt „negativ“ ersetzt.\n- Statt alles in einem `for` mit `else if` zu verketten: Denke in klaren Phasen/Schritten (erst Index der 7 finden, dann ab danach eine negative, dann ab danach eine gerade). Das vermeidet, dass ein Treffer für eine Kategorie durch ein `else` die Prüfung anderer Kategorien blockiert.\n\n3. Code Style\n- Entferne auskommentierten alten Code (die verschachtelten `for`-Schleifen). Das erschwert das Lesen und ist in Abgaben meist unerwünscht.\n- Benenne Variablen konsistent und selbsterklärend (z.B. `siebenIndex`, `negIndex`) statt nur `sieben`, `negative`, damit klar ist, dass es um Indizes geht.\n\n\nExercise: sqrt\n\n### 1. Correctness\n- Die Methode `squareRoot` ist nicht implementiert und gibt immer `0` zurück; damit kann sie die Quadratwurzel von `x` nicht berechnen.\n- Die geforderte binäre Suche mit `low`, `high` und `mid` (inkl. dem Abbruchkriterium, wenn keine darstellbare Zahl mehr zwischen den Grenzen liegt) wird nicht umgesetzt.\n- Die geforderte Auswahl der besseren der beiden Grenzen am Ende (diejenige mit kleinerer Abweichung von `x` beim Quadrieren) fehlt.\n\n### 2. Suggestion\n- Überlege dir zuerst die Initialisierung von `low` und `high` abhängig davon, ob `x > 1` oder `x < 1` (die Aufgabenstellung gibt dir dafür passende Ungleichungen).\n- Implementiere dann eine Schleife, die `mid` mit der vorgegebenen Formel berechnet und anhand von `mid * mid` entscheidet, ob `low` oder `high` auf `mid` gesetzt werden muss.\n- Nutze als Abbruchbedingung genau das Kriterium aus der Aufgabe: stoppe, wenn `mid` nicht mehr zwischen `low` und `high` unterscheidbar ist (z.B. `low == mid` oder `high == mid`).\n- Entscheide nach dem Abbruch zwischen `low` und `high`, indem du vergleichst, welches Quadrat näher bei `x` liegt.\n\n### 3. Code Style\n- Der Kommentar `// TODO: Implement bisection for square root` ist noch vorhanden; sobald du implementierst, sollte er entfernt oder durch einen aussagekräftigeren Kommentar ersetzt werden.\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>"
} ]
}
}