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?
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.
Versuchen Sie John the Ripper, oder Cain und in der Lage, oder eine beliebige Passwort-Cracking-Software
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?
Vielleicht nicht die eleganteste Lösung, aber Sie könnten
ändern %Vor%bis
%Vor%und nach der Schleife
%Vor%Tags und Links ruby permutation capitalization