【问题标题】:How can I generate all possible words with a specified set of characters? [closed]如何生成具有指定字符集的所有可能单词? [关闭]
【发布时间】:2019-01-21 14:27:59
【问题描述】:

我玩 HackNet 游戏,我必须猜一个词才能绕过防火墙。

密钥长度为 6 个字符,包含字母 K、K、K、U、A、N。

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

【问题讨论】:

  • 您需要某种包含所有可能单词的列表(字典列表)。
  • 对于 python,请检查 itertools 包。
  • 你是怎么尝试的?展示你当前的实现
  • 你自己有没有尝试过?

标签: python bash iteration generator


【解决方案1】:

这是 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() 即可获取可能单词的列表。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 如果OP需要words,那么应该使用print("".join(i))
    猜你喜欢
    • 2012-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-24
    • 2021-09-16
    • 1970-01-01
    • 2014-12-13
    • 1970-01-01
    相关资源
    最近更新 更多