循环遍历文件列表并针对一个 9 字母单词的每个排列测试每个单词

视差糖

我正在为学校做一个简单的 python 项目,其中涉及用户试图在 30 秒内从 9 个字母的随机池中找​​到他们能找到的最长的真实单词。测试用户的答案是否是一个真实的单词是很容易的,通过循环浏览一个包含许多英语单词的文件(它有 114,000 个单词,可能不包括所有单词)。事实上,这需要一秒钟才能运行。

但是,为了检查随机字母池是否有完整的“解决方案”(9 个字母的真实单词),除了针对 9 个字母的单词池的每个排列进行测试之外,我想不出其他任何事情文件中的每一个字。问题是,这确实效率低下,大约需要 7 分钟。毕竟,考虑到有9个!字谜的(阶乘)排列,并且“随机”模块不排除以前的排列,并且文件中有很多单词,计算机必须通过超过 500 亿次比较。在它的末尾,没有找到这个词(使用“幸福”的字谜)。这是我试过的代码:

# python 3.5.2

import random

anagram = ['p','s','h','a','i','s','n','p','e'] # anagram of hapiness


with open('wordlist.txt') as in_file:
    for line in in_file:
    line = line.rstrip() 
    shuffledList = random.sample(anagram, len(anagram)) # randomise order
    shuffledWord = ''.join(shuffledList) # make it a string
    if shuffledWord == line:
        print("YES") # (never happens)
        break

除了实际产生解决方案的代码之外,我正在寻找某种巧妙的算法解决方案/线程技术/绝对可以在 30 秒或更短的时间内找到 9 个字母字谜的原始单词的任何东西。这看起来真的很牵强,但我认为值得一试。有什么建议么?

管理系统

这是带有字谜的小提示:对它们进行排序后,它们是相同的列表。你可以尝试这样的事情:

>>> def is_anagram(word_one, word_two):
...     return sorted(word_one) == sorted(word_two)
...
>>> print(is_anagram('ranagam', 'anagram'))
True

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

打印一行中每个单词的第一个字母

如何大写字符串中每个单词的最后一个字母

每个起始字母仅匹配一个单词

查询每个单词的首字母,并在一个查询中进行全文搜索

提取R中每个单词的第一个字母

通过大写每个单词的每个第一个字母返回String,并以小写形式休息

MySQL:触发以大写每个单词的第一个字母

遍历每个单词后如何用换行符返回单词中的字母?

大写仅每个单词的第一个字母,其余部分小写

REGEX捕获一个句子的两个单词之间的每个n字母单词

将每个单词的第一个字母与上一个单词的字母反向替换

提取每个单词的第一个字母,但保留特定的标点符号

在一个单词中找到每个相同的字母

在单词之间添加空格并使每个单词(除了Java中的第一个小写字母)

在ColdFusion的每个句子中将第一个单词的首字母大写

分隔一个段落列表,并给每个单词单独的CSS

识别文本框中每个单词的第一个字母

打开一个文件,将每一行拆分为一个列表,然后针对每一行中的每个单词检查单词是否在列表中,如果没有,则将其附加到列表中

如何在PHP的句子中大写每个单词的最后一个字母?

仅显示每个单词的字符串的第一个字母

使用for循环和charAt检查每个字母是否在一个单词中恰好出现两次

文字-每个单词一个标签

在JS中将每个单词的第一个字母转换为大写

打印一个单词的每个字母 + 另一个字母 - python

如何只打印每个单词的第一个字母?

我有一个列表,如何拆分列表中的单词以获取列表中的每个字母

从控制台询问一个单词并打印数组中每个字母的索引

循环遍历每行中的每个单词并删除列表中的单词

如何输入一个单词并读取每个字母并通过循环C打印