Erstellung eines Permutations-Schlüssel

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
maclinux
User
Beiträge: 3
Registriert: Montag 24. September 2018, 11:45

Hallo Forum,

ich habe mich seit fast 20 Jahren mit Javascript und fast 16 Jahren mit PHP und MySQL beschäftigt
und suche nach einer Lösung um einen Permutations-Schlüssel zu erstellen.

Die Aufgabe läßt sich weder mit Javascript, noch mit PHP/MySQL lösen.

An dieser Stelle möchte ich Anhand eines kleines Beispiels erklären, worum es geht.

A L A D I N
1 5 2 3 4 6

Das erste A bekommt die 1 zugewiesen, das zweite A die 2, das D die 3, das I die 4, das L die 5 und zuletzt
das N die 6, also in der Reihenfolge des Alphabets.

Bei kurzen Permutations-Schlüssel, die aus z.B. 6 Buchstaben bestehen, mag das ganze noch einfach per
Bleistift und Papier funktionieren. Hat aber ein Schlüssel die Länge von 21 oder gar 31 Buchstaben, dann
fällt sie Sache ziemlich fehleranfällig aus und muss mindestens 3 mal überprüft werden.

Meine Frage an die Experten: Kann man dies Problem mit Python lösen?

Ich habe schon vor etwas längerer Zeit mit Python zutun gehabt und bevor ich gepostet habe, mir
noch einmal die Kontrollstrukturen usw. angesehen, die dem PHP in manchen Punkten ähneln, aber
keinen offensichtlichen Lösungansatz erkennen können.

MfG maclinux
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

maclinux hat geschrieben: Montag 24. September 2018, 12:07 Die Aufgabe läßt sich weder mit Javascript, noch mit PHP/MySQL lösen.
Wenn deine Beschreibung des Problems korrekt und vollständig ist, dann ist diese Aussage falsch und zudem noch extrem peinlich für jemanden der seit ca. 20 Jahren programmiert.

In Python könnte das als Einzeiler so aussehen:

Code: Alles auswählen

code = 'ALADIN'
print(' '.join(str(v[0]) for v in sorted(enumerate(sorted(enumerate(code), key=lambda x: (x[1], x[0])), start=1), key=lambda y: y[1][0])))
Ergebnis: 1 5 2 3 4 6

Nimmst du als Code das Wort "KONTROLLSTRUKTUREN" dann bekommst du 2 8 6 14 10 9 4 5 13 15 11 17 3 16 18 12 1 7
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

Eine Javascript-Variante:

Code: Alles auswählen

text = "ALADIN"
a = Array.from(text).sort()
b = Array.from(text)
for(i=0;i<a.length;i++) b[b.indexOf(a[i])] = i+1
das geht natürlich mit Python genauso:

Code: Alles auswählen

text = "KONTROLLSTRUKTUREN"
b = list(text)
for i, c in enumerate(sorted(text), 1):
    b[b.index(c)] = i
maclinux
User
Beiträge: 3
Registriert: Montag 24. September 2018, 11:45

Hallo /me,

ich habe das programmiert, wofür ich vom Kunden bezahlt wurde.
Und das was ich abgeliefert hat, funktionierte, wie es bestellt wurde.
Was soll daran "extrem peinlich sein"?

"Extrem peinlich" sind die sogenannten Experten, die ich Zwecks Flash
angeheuert habe und dann nichts geliefert haben und ich als Nichtflasher
irgendetwas zusammen zimmern musste.

Ja, Du hast das Problem richtig erkannt und elegant gelöst.

Ich bin, und das ist nicht ironisch gemeint, stark beeindruckt.

MfG maclinux


Hallo Sirius,

bist Du Dir wirklich sicher, das dein Javascript tatsächlich funktioniert
oder hast Du da vielleicht etwas vergessen?

MfG maclinux
Benutzeravatar
__blackjack__
User
Beiträge: 13100
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@maclinux: Was fehlt Dir denn an Sirius3's JavaScript-Lösung? Die Ausgabe des Ergebnisse wäre natürlich noch nett, aber der Algorithmus selbst funktioniert so. Wenn's real eingesetzt werden soll, würde ich noch ein paar Semikolons setzen und 'use strict' erfordert noch ein paar Deklarationen, aber ansonsten‽
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
maclinux
User
Beiträge: 3
Registriert: Montag 24. September 2018, 11:45

Hallo _blackjack_ ,

vor einigen Jahren habe ich ein Buch über AppleScript geschrieben.
Wären meine Scriptbeispiele genauso unvollständig gewesen, hätte es erst vom Lektor
und dann vom Verleger Ärger gegeben und das nicht zu knapp.
Anders wäre es bei einer Anleitung wie: Erstelle erst dies und mache dann das, packe das ganze
in eine Schleife und usw.

MfG maclinux
Benutzeravatar
__blackjack__
User
Beiträge: 13100
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@maclinux: Ist halt kein Buch sondern ein Forenbeitrag der grundsätzlich zeigen soll, dass es in JavaScript geht. Den Algorithmus zeigt es ja auch vollständig und lauffähig. Wenn man das nicht glaubt, muss man halt noch ein ``console.log(b)`` am Ende anfügen.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten