Seite 1 von 2

Strings in allen möglichen Reihenfolgen anordnen

Verfasst: 18.11.2004 21:58
von vonTurnundTaxis
Also... Mein Problem:
Ich möchte aus einer Textdatei Wörter, die untereinander stehen

Code: Alles auswählen

Wort1
Wort2
Wort3
Wort4
Wort5...
in ALLEN möglichen Reihenfolgen miteinander kombinieren.

Also so:
Wort1 Wort2 Wort3...
Wort1 Wort3 Wort4...
Wort´und so weiter...

Dann sollten die einzelnen Wörter auch noch durch ",[LEERZEICHEN]" getrennt werden.
Ich wäre euch sehr dankbar, wenn ihr mir weiterhelfen könntet! :allright:

Verfasst: 18.11.2004 22:16
von Kaeru Gaman
ich würde sie erst in ein array einlesen, und dann mit ner routine, die random() benutzt, kombinieren. da kann man auch ohne probleme ein +" "+ einfügen

Verfasst: 18.11.2004 22:21
von vonTurnundTaxis
Aber mit Random ist doch nicht gesichert, dass es ALLE möglichen Kombinationen sind!
(Außerdem wäre es nett, wenn ihr den Code, den ihr euch vorstellt zumindest angedeutet postet)
THX vTuT

Verfasst: 18.11.2004 22:43
von Kaeru Gaman
ok, mit random kriegt man nicht alle und manche doppelt...

ist denn bekannt, wie viele wörter es sind ?

[EDIT] das beispiel von tibor aus dem archiv (siehe nächste post) sieht für mich passabel aus, da heisst es halt umstricken :wink:

Verfasst: 18.11.2004 23:51
von Tibor
Ich habe im Codearchiv das hier gefunden. (Da findet man fast alles.)
Vielleicht hilft es.
Besonders die Verarbeitungszeiten solltest du beachten. ;)

Verfasst: 19.11.2004 03:23
von MLK
hilft das ? basiert halt auf zufall. wenns systematisch sein sollte, geht das mit schleifen bestimmt gut.

Code: Alles auswählen

Anzahl=5
Dim wort.s(Anzahl-1)
For i=0 To Anzahl-1
    wort(i)="Wort"+Str(i+1)
Next

Repeat
    z+1
    Repeat
        kombi.s=""
        Repeat
            Zahl.s=Str(Random(Anzahl-1))
            If CountString(kombi.s,Zahl)=0
                kombi+Zahl
            EndIf
        Until Len(kombi)=Anzahl
    Until CountString(SchonGehabt.s,kombi)=0
    SchonGehabt.s+kombi+"|"
    WortKombi.s=""
    For i=1 To Anzahl
        WortKombi+wort(Val(Mid(kombi,i,1)))+" "
    Next i
    Debug WortKombi 
Until z=120
Debug z

Verfasst: 19.11.2004 11:38
von Joker
schau mal hier im alten forum
http://robsite.de/php/pureboard-archiv/ ... uf%E4llige
den beitrag von sylvia. das ist echt genieal.brauchste nur auf strings umstellen

Verfasst: 19.11.2004 16:28
von vonTurnundTaxis
@Kaeru Gaman:
Es ist NICHT bekannt, wie viele Wörter es sind.
@Alle: Ich schau mir das Zeug mal an, hoffentlich hilft es mir weiser *hoff* DANKE!

Verfasst: 19.11.2004 16:37
von freedimension
vonTurnundTaxis hat geschrieben:@Kaeru Gaman:
Es ist NICHT bekannt, wie viele Wörter es sind.
Ich weiß das es keine Absicht war, aber durchgängig Großbuchstaben wird als Schreien angesehen und könnte in diesem Fall als unhöflich angesehen werden, schließlich wollte er ja nur helfen ;-)

Edit: zur Hervorhebung von Wörtern ist fette Schrift besser geeignet.

Verfasst: 20.11.2004 20:47
von Froggerprogger
Hey, das war eine knifflige Aufgabe (zum Glück hatte ich gerade etwas Zeit.)
Ich bin auf folgenden Code gelangt (allerdings weiß ich nicht, ob es schnellere Algorithmen gibt, aber der Killer ist sowieso einfach die Anzahl der Permutationen, da diese mit der Fakultät von p_numElems wächst, z.B. bei 14 Elementen : 14! = 87.178.291.200).

http://www.robsite.de/php/pureboard/vie ... =9331#9331
[hab ich mal (im wahrsten Sinne) 'outgesourct' :D ]