gra*_*ero 5 ruby regex file-io
在ruby 1.9.3中,我正在尝试编写一个程序,它将从任意一组字符中找到包含n个字符的所有单词.所以,例如,如果我给出了字符[b,a,h,s,v,i,e,y,k,s,a]和n = 5,我需要找到所有可以使用的5个字母的单词只使用那些字符.使用http://wordlist.sourceforge.net/中的2of4brif.txt单词列表(也包括英国单词和拼写),我尝试了以下代码:
a = %w[b a h s v i e y k s a]
a.permutation(5).map(&:join).each do |x|
File.open('2of4brif.txt').each_line do |line|
puts line if line.match(/^[#{x}]+$/)
end
end
Run Code Online (Sandbox Code Playgroud)
这没有任何作用(没有错误消息,没有输出,就像冻结一样).我还尝试了基于以下线程的变体:
我尝试过的每一个变化都导致:
1)冷冻;
2)打印列表中包含5个字符排列的所有单词(我假设它正在做什么;我没有检查所有数千个打印的单词); 要么
3)打印列表中单词中发现的所有5个字符的排列(再次,我认为这是它正在做的事情).
同样,我不是在寻找包含 5个字符排列的单词,我正在寻找5个字符的排列,这些排列本身就是完整的单词,因此文本文件中的一行只有在打印时才能打印出来.完美匹配排列.
我究竟做错了什么?提前致谢!
这适用于我使用该页面上的 english.0 文件(抱歉,我找不到您提到的特定文件):
a = %w[b a h s v i e y k s a l d n]
dict = {}
a.permutation(5).each do |p|
dict[p.join('')] = true
end
File.open('english.0').each_line do |line|
line.chomp!.downcase!
puts line if dict[line]
end
Run Code Online (Sandbox Code Playgroud)
结构应该非常清晰 - 我在一个巨大的哈希中预先构建了排列字典(您可能需要根据输入大小重新访问它,但现在内存很便宜),然后我使用了输入是“的事实”每行一个单词”,只需键入该哈希值即可。
另请注意,在我的版本中,我只通读该文件一次。在您的文件中,您每次排列都会扫描一次文件,并且有数千种排列。
| 归档时间: |
|
| 查看次数: |
4648 次 |
| 最近记录: |