gpt4 book ai didi

ruby - 获取 Ruby 中的所有元组

转载 作者:太空宇宙 更新时间:2023-11-03 17:20:18 27 4
gpt4 key购买 nike

假设我有以下输入:

inp = [2, 9, 3]

我需要输出作为混合计数中的所有元组,如下所示:

outp = [[0, 0, 0], [0, 0, 1], [0, 0, 2], [0, 1, 0], [0, 1, 1], ..., [1, 8, 2]]

我知道 Knuth vol 4a 中的算法是直接循环解决方案,但我听说 ruby​​ 内部有一些魔力。

我主要是 C++ 开发人员。我的直接解决方案现在看起来像:

inparr = [2, 9, 3]

bmix = Array.new(inparr.size) { |i| 0 }
outp = Array.new

loop do

# some debug output
puts bmix.to_s

#visit next tuple
outp << bmix.clone

digit = inparr.size
while digit > 0 do
digit -= 1
if bmix[digit] + 1 < inparr[digit]
bmix[digit] += 1
break
end
bmix[digit] = 0
end

break if (bmix.select{|x| x != 0}.empty?)

end

如何用简单的几行重写?

最佳答案

inp.
map { |i| (0...i).to_a }.
reduce(&:product).
map(&:flatten)

使用的操作:Range , Enumerable#map , Enumerable#reduce , Array#product , Array#flatten .

关于ruby - 获取 Ruby 中的所有元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49815003/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com