计算某些字符的组合,同时将一些其他字符固定在某个位置

Calculate combinations of certain characters while fixing some other characters on a certain spot

在做一些 cryptanalysis 时,我遇到了需要生成某些字符组合的情况。这可以使用许多在线组合生成器轻松完成,除了我想 FIX 我已经知道的某些字符的位置在正确的位置,同时为其余的生成组合。例如,我有字符 'A', 'B', 'c', 'D, 'e', 'F', and 'g'.

现在,我知道 'A' 会排在第一位。所以在第一个位置修复 'A'。现在,我知道第二和第三位可能是 'B''c'。因此,将 'B''c' 置换为第二和第三位置。对于第四个位置,我有一个固定的 'D'。第五,固定 'e'。第六,'F''f'。对于第七个,'g''3'。等等..

我的问题是如何在按我想要的方式排列其余字符的同时修复某些字符?有没有我可以使用的工具,或者我需要自己编写吗?有人能告诉我一个简单的方法吗?

这可以用Python的itertools.product()函数解决:

#!/usr/bin/env python
from __future__ import absolute_import, division, print_function
from itertools import product


def main():
    for characters in product(*['A', 'Bc', 'Bc', 'D', 'e', 'Ff', 'g3']):
        print(''.join(characters))


if __name__ == '__main__':
    main()

输出:

ABBDeFg
ABBDeF3
ABBDefg
ABBDef3
ABcDeFg
ABcDeF3
ABcDefg
ABcDef3
AcBDeFg
AcBDeF3
AcBDefg
AcBDef3
AccDeFg
AccDeF3
AccDefg
AccDef3