我玩HackNet游戏,我不得不猜测一个词来绕过防火墙。
键长6个字符,并且包含字母K,K,K,U,A,N。
在bash或python中生成所有可能组合的最简单方法是什么? (bash的奖励点)
答案 0 :(得分:0)
这是Python中基于回溯的解决方案:
db = {"K" : 3, "U" : 1, "A" : 1, "N" : 1}
N = 6
def possibilities(v):
l = []
for k in db.keys():
if v.count(k) < db[k]:
l.append(k)
return l
def generateImpl(a):
if len(a) < N:
lst = []
for c in possibilities(a):
lst += generateImpl(a+[c])
return lst
else:
return [''.join(a)]
def generate():
return generateImpl([])
只需运行generate()
即可获得可能单词的列表。
答案 1 :(得分:0)
您有6个字母,需要找到6个字母的组合。如果您一次又一次没有在['K','K','K','U','A','N']中使用相同的字符,那么只有1个排列。
如果可以一次又一次使用相同的字符,则可以使用以下代码生成所有可能的组合。
import itertools
y = itertools.combinations_with_replacement(['K','U','A','N'],6)
for i in list(y):
print(i)