Frage

Ich war jemand mit einem besseren Mathematikfähigkeit der Hoffnung, mich die gesamten Möglichkeiten für eine Zeichenfolge in herauszufinden, unterstützen würde es die Länge und Zeichensatz gegeben.

d. [A-f0-9] {6}

Was sind die Möglichkeiten für dieses Muster von zufälligen Zeichen?

War es hilfreich?

Lösung

Es ist gleich die Anzahl von Zeichen in dem Satz der 6. Potenz erhoben. In Python (3.x) Interpreter:

>>> len("0123456789abcdef")
16
>>> 16**6
16777216
>>>

EDIT 1: Warum 16,7 Millionen? Nun, 000000 ... 999999 = 10 ^ 6 = 1 M, 16/10 = 1,6 und

>>> 1.6**6
16.77721600000000 

* EDIT 2: * Um eine Liste in Python zu erstellen, tun: print(['{0:06x}'.format(i) for i in range(16**6)]) Dies ist jedoch zu groß. Hier ist ein einfacheres, kürzeres Beispiel:

>>> ['{0:06x}'.format(i) for i in range(100)]
['000000', '000001', '000002', '000003', '000004', '000005', '000006', '000007', '000008', '000009', '00000a', '00000b', '00000c', '00000d', '00000e', '00000f', '000010', '000011', '000012', '000013', '000014', '000015', '000016', '000017', '000018', '000019', '00001a', '00001b', '00001c', '00001d', '00001e', '00001f', '000020', '000021', '000022', '000023', '000024', '000025', '000026', '000027', '000028', '000029', '00002a', '00002b', '00002c', '00002d', '00002e', '00002f', '000030', '000031', '000032', '000033', '000034', '000035', '000036', '000037', '000038', '000039', '00003a', '00003b', '00003c', '00003d', '00003e', '00003f', '000040', '000041', '000042', '000043', '000044', '000045', '000046', '000047', '000048', '000049', '00004a', '00004b', '00004c', '00004d', '00004e', '00004f', '000050', '000051', '000052', '000053', '000054', '000055', '000056', '000057', '000058', '000059', '00005a', '00005b', '00005c', '00005d', '00005e', '00005f', '000060', '000061', '000062', '000063']
>>> 

EDIT 3: Als Funktion:

def generateAllHex(numDigits):
    assert(numDigits > 0)
    ceiling = 16**numDigits
    for i in range(ceiling):
        formatStr = '{0:0' + str(numDigits) + 'x}'
        print(formatStr.format(i))

Das wird eine Weile dauern, bei numDigits drucken = 6. Ich empfehle dieses statt wie so zu Datei Dumping:

def generateAllHex(numDigits, fileName):
    assert(numDigits > 0)
    ceiling = 16**numDigits
    with open(fileName, 'w') as fout:
        for i in range(ceiling):
            formatStr = '{0:0' + str(numDigits) + 'x}'
            fout.write(formatStr.format(i))

Andere Tipps

Wenn Sie nur für die Anzahl der Möglichkeiten suchen, ist die Antwort (charset.length)^(length). Wenn Sie tatsächlich benötigen, um eine Liste der Möglichkeiten zu erzeugen, nur eine Schleife durch jedes Zeichen, rekursiv den Rest des Strings zu erzeugen.

z.

void generate(char[] charset, int length)
{
  generate("",charset,length);
}

void generate(String prefix, char[] charset, int length)
{
  for(int i=0;i<charset.length;i++)
  {
    if(length==1)
      System.out.println(prefix + charset[i]);
    else
      generate(prefix+i,charset,length-1);
  }
}

Die Anzahl der Möglichkeiten ist die Größe des Alphabets, um die Macht der Größe der Zeichenfolge (im allgemeinen Fall, natürlich)

Ihre Stringgröße unter der Annahme 4: _ _ _ _ und Ihr Alphabet = {0, 1}: gibt es 2 Möglichkeiten 0 oder 1 ist in erster Linie, eine zweite Stelle zu setzen und so weiter. so dass es alle Beträge bis zu: alphabet_size ^ String_size

zuerst: 000000 zuletzt: ffffff

Das passt hexadezimale Zahlen.

Für jede gegebene Menge der möglichen Werte, die Anzahl der Permutationen ist die Anzahl der Möglichkeiten, die Macht der die Anzahl der Elemente erhöht.

In diesem Fall, dass 16 bis 6. Macht sein würde, oder 16.777.216 Möglichkeiten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top