Natürlich hast du recht wenn du sagst das meine Lösung für WordWrap nicht die beste Performance hat aber auf der anderen Seite muss man sich wirklich ernsthaft fragen: Ist das eine Requirement? Welche Daten sollen überhaupt verarbeitet werden? Werden die anderen NFR dadurch verschlechtert? etc.
...aber ich denke bei einer einfachen Kata wie dieser hier kommt es in erster Line eher auf die Basics an (Struktur, Test, Erweiterbarkeit, Verständnis etc.).
Wie gesagt, ich wollte das zumindest nicht unkommentiert lassen. Und ich möchte nochmal betonen, dass ich Optimierungen ganz sicher nicht über andere Anforderungen stelle. Wenn durch eine performantere Implementierung die Verständlichkeit, Erweiterbarkeit usw. leidet, sollte man sich ganz genau anschauen, ob es die Optimierung wert ist und ob man sie überhaupt braucht. Ich will aber darauf hinaus, dass es oft viele völlig natürliche Lösungen für ein Problem gibt, und wenn man ein bisschen darauf achtet, wählt man einfach die performantere Variante, ohne dass einer der anderen Aspekte drunter leiden würde.
Wenn du sagst, für dich spielt es bei den Katas eine untergeordnete Rolle, ist das völlig in Ordnung.
Ich persönlich würds aber eher so sehen, dass man sich das nicht angewöhnen sollte. Wobei das natürlich ein schwieriger Punkt ist, vor allem bei so einem Kata... Deine Lösung ist natürlich durchaus "elegant". Ich würde das in unserem Produktivsystem bei Code Reviews (ich mach auch welche) an bestimmten Stellen sicher ankreiden, aber es würde sicher auch genug Stellen geben, wo das eine völlig legitime Lösung wäre.
Ob etwas ein Requirement ist, kannst du nicht wissen. Ich bin wahrscheinlich besonders sensibel für diesen Punkt, weil ich sehr viel mit Optimierungen zu tun habe. Die Ausgangslage bei uns ist, dass wir viele Millionen Zeilen Code haben und eine Codebasis, die über Jahrzehnte von wahrscheinlich über hundert verschiedenen Entwicklern erstellt und gewartet wurde und es kommt ständig viel dazu oder wird ersetzt. Was wo wie verwendet oder später verwendet werden wird, kann man ganz schlecht abschätzen. Es kommt eine Anforderung dazu, man will Code wiederverwenden, nimmt eine vorhandene Implementierung, ohne sich das genau anzuschauen, testet seinen Use Case, hat kein Problem damit. Aber ein anderer, der wiederum diese Komponente verwendet, hat jetzt plötzlich ein Problem, weil er in bestimmten Konstelleationen ganz häufig die eine Funktion aufruft, die diese schlecht geschriebene Funktion aufruft... Fällt drei Jahre später auf. Wir haben auch viel Code, der "irgendwie" geschrieben ist, nach dem Motto, "ist doch egal, das muss doch nicht schnell sein". Ich hab sicher schon hunderte solcher Funktionen umgebaut. Das ist für mich Arbeitsalltag. Ist sicher nicht in jeder Firma so. Wollte nur etwas verdeutlichen, warum ich verstärkt auf sowas achte und warum das aus meiner Sicht keine so untergeordnete Rolle spielt.
Wobei ich schon wieder deutlich mehr geschrieben habe, als ich eigentlich wollte 😉 Wie gesagt, ich wollts zumindest nicht unkommentiert lassen und dich darauf hinweisen, aber wenn du sagst, das spielt für dich hier keine Rolle, ist das für mich auch völlig in Ordnung.
Vielleicht kannst du ja mal deine (komplette, Sprache egal) Lösung posten?
Ich mach sowas ganz selten und dafür finde ich das Problem jetzt auch nicht interesasant genug. Mein grundsätzlicher Vorschlag sollte ja klar sein? Pseudoalgo:
- Schleife mit entsprechender Abbruchbedingung
- An die Stelle im String schauen, der der maximalen Länge entspricht, wenn String lang genug
- Rückwärts iterieren, bis du einen Worttrenner findest.
- Diesen String dann kopieren, das ist auch die Anfangsposition, an der du im nächsten Schleifendurchlauf weitermachst.