所以基本上这是试图生成一个大小为N的文字广告。这是一个非常天真的算法,因为它在我的单词列表中弄清楚每个组合(N)。但是,我稍微阅读了一些文档,我认为添加.each会使这不会把所有这些都放在堆上吗?我不确定这一切究竟是如何起作用的,但确实看起来确实应该有效。
适用于N = 2,但适用于高于此值的任何内容:
GC警告:无法将堆扩展8388608字节 GC警告:无法将堆扩展8388608字节 GC警告:无法将堆扩展65536字节 GC警告:内存不足!堆大小:2967 MiB。返回NULL! 地址0xc处的内存访问(信号11)无效 [0x5d700] * CallStack :: print_backtrace:Int32 +104 [0x5222c] __crystal_sigfault_handler +84
我是来自Ruby的水晶,所以我不知道我在这里做什么。任何提示将在这里赞赏!我希望我已经清楚地说明了我在这里要做的事情,但如果需要我可以添加更多细节。
def wordsquare(n)
words = File.read_lines("../txt/data/scrabble.txt").map{ |s| s.chomp }.select { |w| w.size == n }
words
.combinations(n).each
.select do |combo|
(0...n).all? { |idx| words.includes?(combo.map { |cmb| cmb[idx] }.join) }
end
end
p wordsquare(3).first(1)
# why is it running out of memory even though it's an iterator?
# :(