如何生成具有指定字符集的所有可能单词?

时间:2019-01-21 14:28:00

标签: python bash iteration generator

我玩HackNet游戏,我不得不猜测一个词来绕过防火墙。

键长6个字符,并且包含字母K,K,K,U,A,N。

在bash或python中生成所有可能组合的最简单方法是什么? (bash的奖励点)

2 个答案:

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