Großschreibung der Groß- und Kleinschreibung

8

Ich wollte ein Ruby-Snippet schreiben, das einen String aufnehmen und alle möglichen Permutationen der Groß- und Kleinschreibung ausgeben würde. Grundsätzlich habe ich ein Passwort, an das ich mich erinnere, aber ich erinnere mich nicht, wie es groß geschrieben wird.

Ich habe bisher folgendes:

%Vor%

Das funktioniert gut genug, aber ich habe mich gefragt, ob Rubyists da draußen mir helfen könnten, es zu verfeinern, damit es nicht unnötig auf Strings mit Zahlen arbeiten muss.

Zum Beispiel erzeugt der String "tst1":

%Vor%

Die Ausgabe, nach der ich suche, ist:

%Vor%

Irgendwelche Ideen?

    
epid 07.09.2009, 16:41
quelle

9 Antworten

13

Was für eine großartige Gelegenheit, meine Vorlesungen über "Ableitung von Algorithmen", die Dijkstra-Methode, aus den Tagen der Universität hier in die Praxis umzusetzen. Dies ist die 'saubere' Version

%Vor%

BEARBEITEN : Dijkstra hat uns beigebracht, nicht zu früh zu optimieren, also dachte ich, die Array-Version würde besser separat hinzugefügt werden :-):

%Vor%

Und um es blitzschnell zu machen, konvertiert man mit Hilfe eines zusätzlichen Methodenarguments in die Tail-Rekursion:

%Vor%

Nun ist das eigentlich sehr langsam, aber die Tail-Rekursion erlaubt ein einfaches Umschreiben (siehe für sich selbst) in die optimierte Version :

%Vor%

Wie wichtig ist das? Nun, lassen Sie uns einige zeitgesteuerte Tests durchführen, zum Spaß:

%Vor%

Auf meinem Rechner zeigt dies den Unterschied:

%Vor%

Die Geschwindigkeitszunahme und Leistungsvorteile werden durch nicht-triviale Zeichenketten sichtbar; "tst1" wird in der sauberen Version schnell ausgeführt. Dijkstra hatte also recht: keine Optimierung nötig. Obwohl es einfach Spaß gemacht hat, es trotzdem zu tun.

    
Felix Ogg 09.09.2009, 10:46
quelle
2

Versuchen Sie John the Ripper, oder Cain und in der Lage, oder eine beliebige Passwort-Cracking-Software

    
Nona Urbiz 07.09.2009 17:00
quelle
2

Sie sollten ein weiteres Array erstellen und statt put einfach in das Array einschließen, wenn es nicht bereits im Array enthalten ist. Dann folge ihnen nach deiner Schleife mit \n oder was immer du magst.

%Vor%

Die Ausgabe:

%Vor%     
Garrett 07.09.2009 17:03
quelle
1

Noch eine andere Lösung (wer kann widerstehen, es zu versuchen?):

%Vor%

gibt [tst1, tsT1, tSt1, tST1, Tst1, TsT1, TSt1, TST1] zurück     

Whoever 09.09.2009 12:21
quelle
0

Nun, ich kenne Ruby nicht, also könnte ich mich irren, aber es scheint mir, dass der Code funktioniert. Es ist nur so, dass Sie keine Ziffern berücksichtigen, wenn Sie die Groß- und Kleinschreibung ändern. Die Ziffer Eins hat nur eine Version, daher sieht die Großschreibung gleich aus. Also: "tst1" und "tst1", "tsT1" und "tsT1" und so weiter ..

Hast du den Code mit "acb" ausprobiert? Funktioniert das gut oder haben Sie das gleiche Problem?

    
Mike Dinescu 07.09.2009 16:47
quelle
0

Eine einfache Methode könnte darin bestehen, die Zahlen aus der Zeichenfolge zu entfernen, die Ergebnisse an die bereits geschriebene Funktion zu übergeben und die Zahlen dann wieder in den gleichen Index zu schreiben.

    
redtuna 07.09.2009 16:48
quelle
0

Vielleicht nicht die eleganteste Lösung, aber Sie könnten

ändern %Vor%

bis

%Vor%

und nach der Schleife

%Vor%     
Jonas Elfström 07.09.2009 16:53
quelle
0

Geringfügiges Mod-zu-Original-Programm

%Vor%     
DigitalRoss 07.09.2009 16:59
quelle
0

so?

%Vor%     
neoneye 07.09.2009 16:53
quelle