1
私は、ナップザック問題のように、任意の入力数のすべての組み合わせを繰り返したいと思っています。Rubyでは、任意の数の配列に対してどのように反復処理を行うことができますか?
たとえば、私の関数が3つの配列を取る場合、すべてのi×j×kの組み合わせを取得したいと思います。私の関数が5つの配列を取る場合、私はすべてのi×j×k×l×mの組み合わせを得たいです。
例1:
result = all_products([1,2,3,4,5], [1,2,3], [10,20,30,40,50,60,70,80])
result.length == 120
例2:
result = all_products([1,2,3], [1,2,3], [1,2,3], [1,2,3], [1,2,3], [1,2,3])
result.length == 729
しかし、私は私が取るつもりですどのように多くの配列がわからない
これを行う方法は何Rubyで?
これは、ではありません。は、1つの配列のすべてのペアの検索方法を尋ねています。私の入力配列はおそらくすべて異なっているでしょう。ここで
は、私がこれまで試したものです:
def self.all_combinations(*sets)
input = *sets;
prod = sets.inject(1) { |p,a| p * a.length }
prod.times do |p|
args = []
index = p
input.each do |array|
quotient = index/array.length
remainder = index % array.length
args << array[remainder]
index = quotient
pp args
end
end
詐欺ではありません。質問をお読みください。 –
あなたはこれまでに何を試しましたか?あなたは小さなサンプル配列と予想される出力を与えることができますか? – whodini9
任意の数のargに対してスプラット演算子でargsを渡します 'all_products(* products)'これは配列の配列として 'products'にそれらを代入します。その後、デカルト製品をどのように把握する必要があります。 –