Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: Obrac am 12.07.05 - 20:52:13
-
Hallo..
Ich möchte folgendes machen:
Ich habe eine Maske, in der es zwei Felder gibt und einen Button. Im ersten Feld soll man einen String eingeben können und dann soll man über einen Button diesen String in allen möglichen Variationen in das zweite, berechnete Feld schreiben können.
Beispiel:
Im ersten Feld steht "rak" und per Knopfdruck soll dann im zweiten erscheinen:
rak
rka
ark
akr
kra
kar
Also sollen die Elemente des Strings in allen möglichen Variationen neu zusammengesetzt werden.
Hat jemand einen Tip oder eine Lösung?
Danke im Voraus..
Nad
-
Du kannst mal googeln nach "Algorithmus Permutation" oder "Algorithmus Kreuzprodukt".
Andreas
-
wie willst du das denn realisieren Script oder Formel ?
Vom Algorithmus (Permutation ist wohl das richtige Wort für dein Problem ) würde ich das so realisieren
RAK ist dein Wort
Das wort ist n buchstaben lang, also kann jeder Buchstabe nur n-1 Mal an erster Stelle stehen; das merken wir uns schon einmal.
Jetzt müssen wir vom ersten Buchstaben den Rest abtrennen; könnte man mit @Word machen.
R AK
Wir kennen ja den Wert von n; also sind wir hier schon mal auf der sicheren Seite, weil wir die Überlegung auf beliebig lange Wörter anwenden können.
Der Code müsste dann theortisch so weiterlaufen; nimm den letzten Buchstaben und stelle ihn vor den verbleibenden Rest. Das Ganze mach n-1 mal ( das ursprüngliche Wort RAK haben wir ja schon )
R AK
R KA
RAK haben wir uns irgendwo gemerkt; jetzt nehmen wir den letzten Buchstaben von RAK und stellen ihn vorne an und die Schleife geht von vorne los.
K RA
K AR
Jetzt noch ein zweiter ( n -1 ) Schleifendurchlauf und wir erhalten
A KR
A RK
die ganzen kombinationen haben wir uns in einem String mit trennzeichen gemerkt. Sollen nur die Variationen erscheinen, kann man mit @ReplaceSubstring das Ursprungswort aus dem String entfernen.
Na, ja, sehr theoretisch,ich weiß, aber du wolltest ja einen Tip oder eine Lösung.
OK, das war mein Tip :D
-
Jo, Ulrich hat es gesagt - es ist ein "simpler" Permutations-Algorithmus, der benötigt wird. Mit R5 geht das nicht mit @functions, mit R6 vielleicht, wäre aber eine sinnlose Vergewaltigung eines falschen Instruments für diesen Zweck.
Ergo: LS. Algorithmus selber austüfteln oder - wie von Andreas vorgeschlagen - suchen, oder Ulrichs Ansatz folgen.
Bernhard
PS: Frage: Wozu soll das in welchem Kontext gut sein ?
-
Kreuzworträtselraten ........... O0
-
Notes kann doch permutieren:
Man müßte aus dem String eine Liste machen können,
die aus den einzelnen Buchstaben besteht.
Ab dann wärs einfach:
Soviel Buchstaben (also soviel Elements der Liste),
so oft wiederholt man die Permutation
und darüber ein @Unique
@Unique(OldList *+ OldList *+ OldList);
Nur wie man aus dem dreibuchstabigen String mal schnell eine drei-elementige Liste macht, fällt mit in R5 auch nicht ein. In R6 wärs easy.
-
Kreuzworträtselraten ........... O0
Ja, die Schweizer ... Das erinnert mich jetzt an Emil Steinberger und seine legendäre Kreuzworträtsel-Lösung mit "Oktern" und "Brgel" ;D
Bernhard
EDIT: Das war natürlich keine Permutation über die Lösung, sondern schlicht über's Alphabet, dafür aber mit "automatischen Abgleich der Nebenbedingungen". Also anspruchsvoller ... Die Schweizer eben ...
-
Sorry, dass ich mich erst so spät wieder hier melde. Es gibt eigentlich keinen Grund, warum ich das Skript brauche. Inspiriert wurde ich dazu durch den Sender 9live. Dort werden dauernd diese blöden Quizsendungen gemacht, bei denen man Buchstaben in die richtige Reihenfolge bringen muss. Da dachte ich mir, warum programmier ich sowas nicht mal..
Das Problem ist, dass mir keine Methode einfällt, mit der man an die Elemente eines Strings kommen und diese in Variablen schreiben kann. Danach wäre es wirklich einfach..
-
Wie gesagt, mit Notes 6 ist das ein Dreizeiler
und die komplette Permutationslösung-Lösung wäre dann noch eine Zeile mehr.
Leiste Dir doch einen R6 Client,
dann kannst Du die Rätsel lösen und fleißig dort anrufen
und hast das Geld für den Client wieder drin ;)
Hätte nicht gedacht, dass Berhard und Jens so "nah dran lagen" bei Ihrer Vermutung. Schade um die Zeit.
-
Ich bin ein armer Schlucker.. und wer da anruft, wird noch ärmer. Ich muss es wohl mit R5 versuchen.
-
Jetzt hast Du aber soviel Input bekommen, da erwarten wir aber auch nun eine Lösung von Dir ;D
In gespannter Erwartung
Andreas
-
Ich meine auch nur, es wäre fairer, so einen Satz:
Es gibt eigentlich keinen Grund, warum ich das Skript brauche
an den Anfang des Threads zu stellen.
Vielleicht ein nett gemeinter Tipp für die Zukunft.
Gruß,
Uwe
-
Ich meine auch nur, es wäre fairer, so einen Satz:
Zitat
Es gibt eigentlich keinen Grund, warum ich das Skript brauche
an den Anfang des Threads zu stellen.
Vielleicht ein nett gemeinter Tipp für die Zukunft.
Gruß,
Uwe
Warum? Darf man hier nur Fragen stellen, wenn diese dringender beruflicher Natur sind? Ich habe mit keinem Wort gesagt, dass ich die Lösung unbedingt ganz schnell brauche und ich wüsste auch nicht, dass man das hier jedes Mal extra erwähnen muss, wenn man eine Frage stellt, die sich auf rein privates Interesse begründet.
-
Meiner Meinung nach wäre es nur fair, wenn man einen Hinweis gibt "Nur Interesse halber, es besteht kein akutes Problem".
Ausserdem kann ich Deine Reaktion nicht verstehen. Du hast WIRKLICH viel Input bekommen, es aber mit keiner Silbe erwähnt. :(
Andreas
-
Ja, du hast recht. Ich habe vergessen, mich zu bedanken. Das tut mir leid. Ich danke euch für die Hinweise.
Den anderen Punkt finde ich ein wenig unfair. Die Leute schreiben doch meist, wenn es dringend ist und das hätte ich vielleicht auch gemacht, wenn es so gewesen wäre. War aber nicht nicht. Ich habe es bis jetzt in noch keinem einzigen Programmierforum erlebt, dass man deswegen so einen Aufstand macht.
-
Gegen Forschungsprojekte gibt es ja auch gar nichts einzuwenden. Das machen wir hier öfters, nur wird es dann gesagt.
Wir müssen uns die Threads, die wir beantworten bzw. interessiert beobachten, aber auch einteilen. Und dann ist es den Fragestellenden gegenüber nur fair, wenn man "echte Probleme" zuerst behandelt, bevor man sich den evtl. sogar interessanteren (wie in Deinem Fall) widmet.
Ich hoffe auf Dein Verständnis.
Und andere Foren interessieren mich nicht. Wenn Du meinst, dass Du dort besser behandelst wirst, dann musst Du da posten.
Wie gesagt: Dein Problem ist interessant und nun sollten wir zur technischen Diskussion zurückkehren. Mit dem Input solltest Du nun in der Lage sein, einen ersten Programmentwurf zu machen. Falls Du nicht weiterkommst oder Fragen hast, helfen wir natürlich gerne.
Übrigens: Nach 20:00 sind die meisten dringenden Fälle erledigt und dann nehmen wir uns die Forschungsprojekte vor ;)
Andreas
-
Ich hoffe auf Dein Verständnis.
Und andere Foren interessieren mich nicht. Wenn Du meinst, dass Du dort besser behandelst wirst, dann musst Du da posten.
Das war lediglich eine Rechtfertigung von mir. Wenn ich meine, mich dort besser aufgehoben zu fühlen, hätte ich dort gepostet.
Die Antworten auf mein Thema (ausser die von heute natürlich) wurden ja auch allesamt nach 20 Uhr getätigt, also gibts ja keinen Grund zur Unruhe.
OK, ich sehe mal, ob ich weiterkomme und melde mich dann nochmal.
-
Schön, dass wieder Einigkeit herrscht :) Was gesagt wurde, war sicherlich nötig, aber nun ist ja alles im Lot.
Vorschlag:
Drösel den Vorgabestring mit LS in ein Array aus einzelnen Buchstaben auseinander.
Mit Uwes Vorschlag dann mit diesem Array in Formelsprache weitermachen - ggf. mit Evaluate (wegen R5).
Es stimmt schon - das Thema ist nicht uninteressant, wenn auch reichlich "unpraktisch" (solange keine ernsthafte Anforderung anliegt). Aber der Praxisbezug kann ja schneller kommen als gedacht.
Good luck !
Bernhard
PS: Auf jeden Fall ist solch eine Denksportaufgabe lohnenswerter als 9Live ;D
-
In R5 wird es mit Formelsprache knifflig, um es mal harmlos auszudrücken. Daher rate ich auch zu Script.
Eine Frage kam hier am Rande:
Nur wie man aus dem dreibuchstabigen String mal schnell eine drei-elementige Liste macht, fällt mit in R5 auch nicht ein
Es geht, wenn man weiss, aus welchen Zeichen der String bestehen kann.
Für die 3 Zeichen r a k ginge es dann so:
_Liste := @Explode(@ReplaceSubstring(SourceString;"r":"a":"k";"r ":"a ":"k ");" ");
Das aber nur am Rande. Insgesamt würde das in eine wüste Tipparbeit ausarten.
Leider gibt es ja keine Wildcard als 2. Parameter.
Andreas
-
Es geht, wenn man weiss, aus welchen Zeichen der String bestehen kann.
Dahin würde man vielleicht kommen, indem man anstatt ein Feld für das ganze Wort, ein Feld für jeweils einen Buchstaben benutzt. Dann müsste man aber natürlich die Anzahl der Buchstaben, aus dem das Wort besteht, begrenzen.
-
Hallo Dan und sorry,
ich denke, das war mein Fehler.
und bin sicher, DU hast recht.
Warum? Darf man hier nur Fragen stellen, wenn diese dringender beruflicher Natur sind? Ich habe mit keinem Wort gesagt, dass ich die Lösung unbedingt ganz schnell brauche und ich wüsste auch nicht, dass man das hier jedes Mal extra erwähnen muss, wenn man eine Frage stellt, die sich auf rein privates Interesse begründet.
Das ist ein offenes Forum und alle Antworten sind freiwillig.
Wenn einer der Meinung ist (so wie ich es in diesem Fall war),
mit einer Antwort seine Zeit zu verschwenden, dann ist das in einem offenen Forum einzig das Problem des Antworters - und nicht des Fragers.
Ich bin davon ausgegangen, dass man sich an das Forum wendet,
wenn man ein Problem hat, das man alleine nicht lösen kann - aber (dringend) lösen muss.
Das habe ich so im Unterbewußtsein - wahrscheinlich weil ich es persönlich so mache.
Im Kontext des Forums ist diese (meine) Sichtweise aber sicher falsch.
Sorry und Gruß,
Uwe
-
Ich denke, wir haben uns alle ein wenig mißverstanden.. und es war auch blöd von mir, mich nicht zu bedanken. Das ist eigentlich nicht meine Art, ich hoffe, ihr glaubt mir das. ::)
Also, vergessen wir die kleinen Unstimmigkeiten einfach..
-
Hallo Uwe,
ich denke, alle hatten irgendwo ein Stück das Richtige gesagt. Eskaliert ist es bestimmt, als das Wort "9Live" auftauchte. Ich kenne das - ich neige bei solchen Bezügen auch zur Überreaktion (und wenn dann noch jemand postet und sich lange dazu nicht mehr rührt ...)
Hier war es aber bestimmt ganz anders (Dan hat ja auch den "9Live"-Bezug gleich im selben Satz kommentiert).
Ich finde es nur gut, dass sich das fast "real-time" alles geklärt hat. Und da Dan eine Studienaufgabe sucht, sollten wir nun auch entsprechend reagieren und daher keinen fertigen Code posten ;)
Bernhard
-
Dahin würde man vielleicht kommen, indem man anstatt ein Feld für das ganze Wort, ein Feld für jeweils einen Buchstaben benutzt. Dann müsste man aber natürlich die Anzahl der Buchstaben, aus dem das Wort besteht, begrenzen.
Daniel, jetzt hast Du aber die ersten und vor allem die letzten lösungsbezogenen Postings nicht gelesen ...
Bernhard
-
Inwiefern?Wo hinkt mein Lösungsvorschlag?