none
Kombinationsliste erstellen

    Frage

  • Guten Abend zusammen,

    ich suche gerade eine Möglichkeit eine liste von Kombinationen zu erstellen.

    Das Ganze sollte von 8 - 64 Zeichen alle Zeichen enthalten A - Z und 0 - 9 inkl. Sonderzeichen.

    Mir ist bewusst das es gewissen Rechenaufwand benötigt aber das ist dank Azure und Skalierbarer Leistung kein Problem ;-)

    Das Ergebnis sollte als Blanke TXT Datei alle Kombinationen enthalten untereinander.

    Über eine schnelle Hilfe wäre ich sehr dankbar.

    Mit besten grüßen

    Rafael

    Dienstag, 6. März 2018 20:14

Antworten

  • Ich weiß das es ne sehr große Rechenaufgabe darstellt und das ganze mache ich eben genau aus dem aspekt das ich es testen und als Übung nehmen möchte.

    Bzgl. Azure bekomme ich Guthaben bereitgestellt.

    Sorry, aber Du solltest zuerst eine einfache Rechenübung machen ;-)

    Ich habe mal von 4 bis 12 für Dich gerechnet. Du schaust auf eine Textdatei von 4 Milliarden Petabyte Größe. Dein Azure-Guthaben möchte ich gerne sehen.


    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> https://exusg.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com


    In theory, there is no difference between theory and practice. In practice, there is.

    Donnerstag, 8. März 2018 17:23
  • Das hier ist eine mögliche Lösung mittels Rekursion, die dir alle Kombinationen von a, b und c mit Länge 5 liefert:

    # rekursiv aufgerufene Funktion definieren
    function recursion {
        param($länge, $string, $maxlänge)
    
        if($länge -ne $maxlänge){
            foreach($z in $global:Zeichen){
                recursion ($länge + 1) ($string + $z) $maxlänge
            }
        } else {
            #tiefste Ebene erreicht: Ergebnis speichern
            $global:Ergebnis.Add($String)
        }
    }
    
    #Haupt-Skript
    #Zeichenmenge
    $global:Zeichen = "a","b","c"
    
    #Liste zum Speichern der Ergebnisse
    $global:Ergebnis = New-Object System.Collections.Generic.List[System.Object]
    
    #Start der Rekursion
    recursion 0 "" 5
    
    #Ergebis anzeigen lassen
    $global:Ergebnis

    Die Parameter der Funktion sind:

    die aktuelle Länge des Strings, entspricht der aktuellen Ebene im Rekursionsbaum (initial 0)

    der aktuelle String (inital der leere String "")

    die maximale Länge des Strings, im Beispiel immer 5


    Montag, 12. März 2018 10:31

Alle Antworten

  • Hmmm. Ja, und was ist die Frage?

    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> https://exusg.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com


    In theory, there is no difference between theory and practice. In practice, there is.

    Dienstag, 6. März 2018 20:29
  • Kannst du das vielleicht an einem Beispiel erklären? Und was hast du schon probiert? 
    Mittwoch, 7. März 2018 07:00
  • Hallo,

    aktuell habe ich eine Simple For-Schleife die alle Zahlenkombinationen von 0 bis 99999999999999999999 generiert.

    Das sollte ergänzt werden gegen eine Schleife die sämtliche Symbole enthält also von a-z,A-Z,0-9 und sämtliche Sonderzeichen.

    Sry das ich die Frage irgendwie komplett vergessen habe. Hätte einer eine Idee wie ich das Problem gelöst bekomme? Wie bekomme ich das in der Powershell gelöst?

    Mit besten Grüßen

    Rafael

    Mittwoch, 7. März 2018 07:12
  • Moin,

    Du kõnntest das mit verschachtelten Schleifen lösen. Da die Menge der Zeichen nicht zusammenhängend ist, müsstest Du foreach- und nicht for-Schleifen verwenden.


    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> https://exusg.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com


    In theory, there is no difference between theory and practice. In practice, there is.

    Mittwoch, 7. März 2018 07:39
  • Du kannst ja mal nach Vollständiger Enumeration suchen, das ist ein exaktes Lösungsverfahren für Optimierungsprobleme. Das sollte schon irgendwo implementiert sein. Du hast zwischen 8 und 64 Variablen und diese können N Werte annehmen, wobei du N als jene Unicode-Codes verstehen kannst, die nach deinen Kriterien ein Zeichen oder Sonderzeichen sind.

    Nebenbei, es ergeben sich nach deinen Vorgaben N^64 + N^63 + N^62 + ... + N^8 Werte. Bei N = 50 (und das ist stark unterschätzt, da das Alphabet allein 2*26 Buchstaben hat) sind schon alleine 50^64 = 5,4E108. Das ist eine 5 mit 108 Nullen. 

    Hast du überhaupt eine Vorstellung, wie groß die Ergebnisdatei werden soll? Was willst du eigentlich mit sowas?

    Mittwoch, 7. März 2018 09:24
  • Was willst du eigentlich mit sowas?

    A poor man's Rainbow Table bauen ;-) Spätestens nach der Begleichung der Azure-Rechnung ist man dann arm...

    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> https://exusg.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com


    In theory, there is no difference between theory and practice. In practice, there is.

    Mittwoch, 7. März 2018 09:37
  • > A poor man's Rainbow Table bauen ;-)

    War auch mein erster Gedanke :-)

    Donnerstag, 8. März 2018 16:26
  • Hallo und vielen dank für die zahlreichen antworten.

    Ich weiß das es ne sehr große Rechenaufgabe darstellt und das ganze mache ich eben genau aus dem aspekt das ich es testen und als Übung nehmen möchte.

    Bzgl. Azure bekomme ich Guthaben bereitgestellt.

    Danke und einen schönen Abend.




    Donnerstag, 8. März 2018 16:55
  • Ich weiß das es ne sehr große Rechenaufgabe darstellt und das ganze mache ich eben genau aus dem aspekt das ich es testen und als Übung nehmen möchte.

    Bzgl. Azure bekomme ich Guthaben bereitgestellt.

    Sorry, aber Du solltest zuerst eine einfache Rechenübung machen ;-)

    Ich habe mal von 4 bis 12 für Dich gerechnet. Du schaust auf eine Textdatei von 4 Milliarden Petabyte Größe. Dein Azure-Guthaben möchte ich gerne sehen.


    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> https://exusg.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com


    In theory, there is no difference between theory and practice. In practice, there is.

    Donnerstag, 8. März 2018 17:23
  • > Du schaust auf eine Textdatei von 4 Milliarden Petabyte Größe. Dein Azure-Guthaben möchte ich gerne sehen.

    Wow... Das sind dann quasi 4 Yottabyte oder 4.000 Zettabyte. Wenn ich mir überlege, daß das weltweite gesamte Datenvolumen 2016 gerade mal 16 Zettabyte betragen hat, ist das eine sportliche Herausforderung - der TO will hier mal kurz das 250fache dieser Datenmenge produzieren... LOL :))

    Freitag, 9. März 2018 12:01
  • Das wahrhaft tolle an Kombinatorik ist, dass man immer mit einer kleinen und überschaubaren Menge anfängt - und auf einmal hat man mehr Möglichkeiten als es Atome auf der Erde gibt...

    Um es noch einmal klar zu sagen: Deine Anforderung ist mit den gegebenen Möglichkeiten der Technik nicht lösbar. Du hast damit folgende Alternativen:

    • Verringerung der Einzelelemente, z.B. ausschließlich Ziffern
    • Verringerung der Länge (du siehst in Evgenijs sehr guter Tabelle, dass selbst eine Länge von 4  bereits 392 MB Speicher erzeugt)


    Freitag, 9. März 2018 12:53
  • Hallo,

    keiner sagt das es ich es bis zum Ende führe. Ich wollte es nur antesten als kleine Übung mehr nicht.

    In meiner Übungen ging es Hauptsächlich um Powershell Übung und Azure Leistungsunterschiede. Ganz einfach nur um Benchmarks und Skripting.

    Aber danke das du es mir mal vorgerechnet hast.

    Danke und Grüße

    Rafael Seeck

    Freitag, 9. März 2018 14:37
  • Das hier ist eine mögliche Lösung mittels Rekursion, die dir alle Kombinationen von a, b und c mit Länge 5 liefert:

    # rekursiv aufgerufene Funktion definieren
    function recursion {
        param($länge, $string, $maxlänge)
    
        if($länge -ne $maxlänge){
            foreach($z in $global:Zeichen){
                recursion ($länge + 1) ($string + $z) $maxlänge
            }
        } else {
            #tiefste Ebene erreicht: Ergebnis speichern
            $global:Ergebnis.Add($String)
        }
    }
    
    #Haupt-Skript
    #Zeichenmenge
    $global:Zeichen = "a","b","c"
    
    #Liste zum Speichern der Ergebnisse
    $global:Ergebnis = New-Object System.Collections.Generic.List[System.Object]
    
    #Start der Rekursion
    recursion 0 "" 5
    
    #Ergebis anzeigen lassen
    $global:Ergebnis

    Die Parameter der Funktion sind:

    die aktuelle Länge des Strings, entspricht der aktuellen Ebene im Rekursionsbaum (initial 0)

    der aktuelle String (inital der leere String "")

    die maximale Länge des Strings, im Beispiel immer 5


    Montag, 12. März 2018 10:31