문제

I was hoping someone with better math capabilities would assist me in figuring out the total possibilities for a string given it's length and character set.

i.e. [a-f0-9]{6}

What are the possibilities for this pattern of random characters?

도움이 되었습니까?

해결책

It is equal to the number of characters in the set raised to 6th power. In Python (3.x) interpreter:

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

EDIT 1: Why 16.7 million? Well, 000000 ... 999999 = 10^6 = 1M, 16/10 = 1.6 and

>>> 1.6**6
16.77721600000000 

* EDIT 2:* To create a list in Python, do: print(['{0:06x}'.format(i) for i in range(16**6)]) However, this is too huge. Here is a simpler, shorter example:

>>> ['{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: As a function:

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

This will take a while to print at numDigits = 6. I recommend dumping this to file instead like so:

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))

다른 팁

If you are just looking for the number of possibilities, the answer is (charset.length)^(length). If you need to actually generate a list of the possibilities, just loop through each character, recursively generating the remainder of the string.

e.g.

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);
  }
}

The number of possibilities is the size of your alphabet, to the power of the size of your string (in the general case, of course)

assuming your string size is 4: _ _ _ _ and your alphabet = { 0 , 1 }: there are 2 possibilities to put 0 or 1 in the first place, second place and so on. so it all sums up to: alphabet_size^String_size

first: 000000 last: ffffff

This matches hexadecimal numbers.

For any given set of possible values, the number of permutations is the number of possibilities raised to the power of the number of items.

In this case, that would be 16 to the 6th power, or 16777216 possibilities.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top