n 개의 배열을 곱해야합니다.배열 곱셈 - 가장 좋은 알고리즘은 무엇입니까?
예 :
- 입력 = "A", "B", "C"] * [ "1", "2"] * [ "&", "(", "$" ]
- 출력 = "A1 &", "A1 (", "(A1)을 $", "A2 &", "A2 (", "(A2)의 $", "B1 &", "B1 (", "B1을 $ ","B2 & ","B2 (","B2 $으로, "C1 &"C1 ("C1을 $"C2 & ","C2 (","C2의 $ "]
I 하 v 전자가 그것을 할 수있는 알고리즘을 만들었습니다.
# input
entries = ["$var1$", "$var2$", "$var3$"]
data = [["a", "b", "c"], ["1", "2"], ["&", "(", "$"]]
num_combinaison = 1
data.each { |item| num_combinaison = num_combinaison * item.length }
result = []
for i in 1..num_combinaison do
result.push entries.join()
end
num_repetition = num_combinaison
data.each_index do |index|
item = Array.new(data[index])
num_repetition = num_repetition/item.length
for i in 1..num_combinaison do
result[i-1].gsub!(entries[index], item[0])
if i % num_repetition == 0
item.shift
item = Array.new(data[index]) if item.length == 0
end
end
end
나는 그것을 할 수있는 가장 좋은 방법이있을 것이라고 확신하지만 그것을 찾지 못했습니다. 나는 성공없이 제품 또는 평평 기능을 사용하려고 노력했다.
누군가가 최상의 해결책을 알고 있습니까?
도움 주셔서 감사합니다.
에릭
아마도 이것이 가장 좋은 해결책 일 수 있지만 적어도 원래 동작을 유지하지 않고 stdlib 메서드를 재정의하는 것은 좋은 생각이 아닙니다. – toro2k
@ toro2k 이것은 OP가 원했던 것과 정확히 같습니다. OP 질문에 대해 언급해야합니다. – sawa
@sawa - 고마워요. 정확히 제가 원하는 것입니다. – elhostis