私は、より優れた数学能力を持つ誰かが、文字列の長さと文字セットを考慮して、文字列の可能性の合計を計算するのを手伝ってくれることを望んでいました.
すなわち [a-f0-9]{6}
このランダムな文字のパターンの可能性は何ですか?
私は、より優れた数学能力を持つ誰かが、文字列の長さと文字セットを考慮して、文字列の可能性の合計を計算するのを手伝ってくれることを望んでいました.
すなわち [a-f0-9]{6}
このランダムな文字のパターンの可能性は何ですか?
セット内の文字数の 6 乗に等しい。Python (3.x) インタープリターの場合:
>>> len("0123456789abcdef")
16
>>> 16**6
16777216
>>>
編集 1: なぜ 1,670 万なのか? さて、000000 ... 999999 = 10^6 = 1M、16/10 = 1.6 および
>>> 1.6**6
16.77721600000000
* 編集 2:*
Python でリストを作成するには、次のようにします。print(['{0:06x}'.format(i) for i in range(16**6)])
ただし、これは大きすぎます。以下は、より単純で短い例です。
>>> ['{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']
>>>
編集3: 機能として:
def generateAllHex(numDigits):
assert(numDigits > 0)
ceiling = 16**numDigits
for i in range(ceiling):
formatStr = '{0:0' + str(numDigits) + 'x}'
print(formatStr.format(i))
numDigits = 6 で出力するには時間がかかります。代わりに、次のようにファイルにダンプすることをお勧めします。
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))
可能性の数は、アルファベットのサイズを文字列のサイズで累乗したものです (もちろん、一般的な場合)。
文字列のサイズが 4 であると仮定すると: _ _ _ _ とアルファベット = { 0 , 1 }: 最初の場所、2 番目の場所などに 0 または 1 を配置する 2 つの可能性があります。したがって、すべての合計は次のようになります。alphabet_size^String_size
可能性の数だけを探している場合、答えは(charset.length)^(length)
です。可能性のリストを実際に生成する必要がある場合は、各文字をループして、残りの文字列を再帰的に生成します。
例えば
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);
}
}
可能な値の任意のセットについて、順列の数は、アイテムの数で累乗された可能性の数です。
この場合、それは 16 の 6 乗、つまり 16777216 の可能性になります。
最初: 000000 最後: ffffff
これは 16 進数に一致します。