C++ Wortsuche
-
@hustbaer sagte in C++ Wortsuche:
Und davon abgesehen machst du das auch viel komplizierter als nötig.
Etwas konkreter wäre schon hilfreich.
Und davon abgesehen erfüllt dein Code nicht die Vorgaben. Wenn ich das richtig verstanden habe sollen erst die drei Wörter eingelesen werden und danach erst die Ausgabe erfolgen.
Kosmetik.
@hustbaer sagte in C++ Wortsuche:
does word start here(word, pos, direction): for each char in word if pos out of bounds return false if char at pos != char in word return false pos += direction return true
mein
strcmp()
macht im prinzip das selbe.
-
Ich würde noch eine Abfrage einbauen, ob sich die Suche überhaupt lohnt. Jetzt nicht um das zu optimieren, sondern weil ich das auch so "in echt" machen würde:
"Gucke an jeder Position, ob das Zeichen an der Position gleich dem Anfangsbuchstaben ist. Falls ja, test alle Richtungen".
Also bei dir:for each X for each Y for each word if char at pos = first char in word for each direction if word starts here print out word, pos, direction
-
@Jockelx sagte in C++ Wortsuche:
Ich würde noch eine Abfrage einbauen, ob sich die Suche überhaupt lohnt. Jetzt nicht um das zu optimieren, sondern weil ich das auch so "in echt" machen würde:
Ja, und mein Code guckt auch nur weiter wenn überhaupt in der jeweiligen Richtung Platz für
word
ist.
-
@Jockelx sagte in C++ Wortsuche:
Jetzt nicht um das zu optimieren, sondern weil ich das auch so "in echt" machen würde:
Das ist aber eine Optimierung. Zu behaupten du würdest das nicht einbauen um es zu optimieren sondern weil du das auch "in echt" so machen würdest (um es zu optimieren!), macht irgendwie keinen Sinn.
-
@Swordfish sagte in C++ Wortsuche:
@Jockelx sagte in C++ Wortsuche:
Ich würde noch eine Abfrage einbauen, ob sich die Suche überhaupt lohnt. Jetzt nicht um das zu optimieren, sondern weil ich das auch so "in echt" machen würde:
Ja, und mein Code guckt auch nur weiter wenn überhaupt in der jeweiligen Richtung Platz für
word
ist.Ja. Was eine nicht geforderte Optimierung ist, die den Code unnötig kompliziert macht. Genau so wie die "restartable" Suchfunktion nicht gefordert wurde und den Code unnötig kompliziert macht.
-
@hustbaer sagte in C++ Wortsuche:
Das ist aber eine Optimierung
Ja und? Darf ja auch eine sein. Die Optimierung ist aber nicht der Grund für die Änderung, sondern weil ich das anschaulicher finde. Ist das so schwer zu verstehen?
-
ps: Und die Optimierung ist nichtmal sinnvoll implementiert. Sinnvoller wäre es gleich die Start- und Endwerte der Schleifen anzupassen.
-
@hustbaer sagte in C++ Wortsuche:
Genau so wie die "restartable" Suchfunktion nicht gefordert wurde und den Code unnötig kompliziert macht.
Wie vermeidest Du doppelt und dreifach dasselbe zu finden?
-
@hustbaer sagte in C++ Wortsuche:
Und die Optimierung ist nichtmal sinnvoll implementiert. Sinnvoller wäre es gleich die Start- und Endwerte der Schleifen anzupassen.
???
-
@Jockelx sagte in C++ Wortsuche:
@hustbaer sagte in C++ Wortsuche:
Das ist aber eine Optimierung
Ja und? Darf ja auch eine sein. Die Optimierung ist aber nicht der Grund für die Änderung, sondern weil ich das anschaulicher finde. Ist das so schwer zu verstehen?
Ja
Also auf die Idee dass man das anschaulicher finden könnte wäre ich nicht gekommen. Und es sollte mMn. kein Grund sein es einzubauen. Wenn man es als Optimierung haben möchte, OK. Aber wenn einem die Optimierung egal ist, dann ist es ein Stück Code das genau keinen Sinn macht. Und Code der Teile enthält die keinen Sinn machen, finde ich persönlich nicht anschaulicher.
-
@Swordfish sagte in C++ Wortsuche:
@hustbaer sagte in C++ Wortsuche:
Genau so wie die "restartable" Suchfunktion nicht gefordert wurde und den Code unnötig kompliziert macht.
Wie vermeidest Du doppelt und dreifach dasselbe zu finden?
So:
for each X for each Y for each word for each direction if word starts here print out word, pos, direction
Wie soll da was doppelt oder dreifach gefunden werden?
-
@hustbaer Ok. 1:0. Darf mir meine Lösung trotzdem gefallen?
-
@Swordfish sagte in C++ Wortsuche:
@hustbaer sagte in C++ Wortsuche:
Und die Optimierung ist nichtmal sinnvoll implementiert. Sinnvoller wäre es gleich die Start- und Endwerte der Schleifen anzupassen.
???
Wenn...
- Meine Zeile 20 Zeichen lang ist
- Das gesuchte Wort 10 Zeichen lang ist
- Ich von Links nach Rechts suche
Wieso sollte ich dann die Schleife von X=0 bis X=19 laufen lassen, und dann in der Schleife immer prüfen ob X <= 10 ist? Das macht doch keinen Sinn. Dann lass ich gleich die Schleife nur von 0...10 laufen.
-
@hustbaer Ist eben die Frage ob man vorher anhand der Suchrichtung entscheidet oder nachher.
-
@Swordfish sagte in C++ Wortsuche:
@hustbaer Ok. 1:0. Darf mir meine Lösung trotzdem gefallen?
Sicher. Ich hab doch nicht behauptet dass deine Lösung irgendwie besonders schlecht wäre. Also bis auf den Range-Check den man eben effizienter machen kann -- wenn man ihn schon unbedingt optimieren will.
Ich sage nur man kann es viel einfacher machen wenn man einfach nur die Aufgabe machen möchte.
-
@hustbaer sagte in C++ Wortsuche:
Also bis auf den Range-Check den man eben effizienter machen kann -- wenn man ihn schon unbedingt optimieren will.
Kannst Du das bei mir mal einbauen, weil ehrlichgesagt stehe ich auf der Leitung.
-
@Swordfish sagte in C++ Wortsuche:
@hustbaer Ist eben die Frage ob man vorher anhand der Suchrichtung entscheidet oder nachher.
Richtig. OK, kann man so oder so machen. Was wirklich schneller ist müsste man vermutlich Benchmarken. Bei kleinen Matrizen die in den L1 passen vermutlich "meine" Variante. Bei grösseren ... keine Ahnung. Und wenn man wirklich optimieren will, muss man das sowieso nochmal ganz anders angehen.
-
@hustbaer sagte in C++ Wortsuche:
Und wenn man wirklich optimieren will, muss man das sowieso nochmal ganz anders angehen.
Optimal wäre wahrscheinlich "im Kreis" zu suchen:
4 3 X 1 2
-
@Swordfish sagte in C++ Wortsuche:
@hustbaer sagte in C++ Wortsuche:
Also bis auf den Range-Check den man eben effizienter machen kann -- wenn man ihn schon unbedingt optimieren will.
Kannst Du das bei mir mal einbauen, weil ehrlichgesagt stehe ich auf der Leitung.
Ich könnte, aber ich bin grad zu faul. Aber falls es darum geht: Es stimmt schon dass man dazu die Verschachtelung ändern müsste. Also du machst Word->Pos->Direction und das funktioniert natürlich nur mit Word->Direction->Pos.
-