对于一些游戏,其中一个需要找到一堆松散的信我最终实现置换算法找出所有可能的字谜,必要时为广为人知的字母位置(过滤那些字谜-match
是伟大的,顺便说一句)。 但不再言语事实证明这很容易出错,因为撇胡言乱语的大名单并没有真正揭示被隐藏内的适当的话。
所以我想, 如果我将有一个英文单词的大名单(应该是某处购得)我可能只是我的交叉排列的列表与正确的单词列表,并得到(希望)从排列列表中的所有真实的单词。
由于PS的工作很多不同的运营商提供集我想我可能只是像做
$wordlist -contains $permlist
并获得交集回来。 可惜这不是那么容易。 我想到的其他选项将遍历一个列表,并做了-contains
每个项目:
$permlist | ? { $wordlist -contains $_ }
这可能会工作,但也很慢,我认为(特别是当$wordlist
是一个结果gc wordlist.txt
)。 或者,我可以建立一个巨大的正则表达式:
$wordlist -matches (($permlist | %{ "^$_`$" }) -join "|")
但是,这可能不会是非常快的要么。 我也许还可以使用findstr
与上述正则表达式巨大,但那种感觉绝对错误的。
是否有任何内置的解决方案,我可以使用,并且有比我更好的尝试迄今? 否则,我可能把这个词列表转换为哈希表,并使用迭代-contains
的做法,应该是足够快呢。
$left = New-HashSet string
$left.Add("foo")
$left.Add("bar")
$right = New-HashSet string
$right.Add("bar")
$right.Add("baz")
$left.IntersectWith($right)
$left.UnionWith($right)
(从借用新的HashSet 乔希爱因斯坦 )
警告:HashSet的那些方法是就地算法,修改原来的集合。 如果你想在一个不可改变的对象函数式变换,你需要把LINQ党:
add-type system.core
$asqueryable = [system.linq.queryable].getmethods() | ? { $_.name -eq "AsQueryable" } | select -first 1
$asqueryable = $asqueryable.MakeGenericMethod([string])
$leftAsQueryable = $asqueryable.Invoke($null, (,$left))
$intersect = [system.linq.queryable].getmethods() | ? { $_.name -eq "Intersect" } | select -first 1
$intersect = $intersect.MakeGenericMethod([string])
$result = $intersect.Invoke($null, ($leftAsQueryable, $right))
显然,需要有人来包装这个静态泛型反射垃圾成一个友好的小命令! 别担心,我的工作就可以了...
你可以拼写检查单词的列表,以及消除对一个标准的字典中的所有拼写错误。
随着GNU aspell
安装的软件包,
cat text.txt | aspell list
会给你所有的误拼写单词的列表。
您可以与其他工作的字典aspell
。
或者只是皮卡的字谜产生这样一个拼字游戏玩家制作 。
革命词搜索有两种选择; 一个字谜Finder和一个拼字游戏解算器。 字谜查找需要的字母列表,并返回所有可以利用它们相对于单词的固定列表创建的有效的字谜。 每个字谜检查针对的有效性SOWPODS这是在当前国际拼字游戏锦标赛中使用的单词列表单词列表。