これは(b.size > a.size
を含む)任意のサイズの配列a
とb
のために働きますマージされた配列内のa
からの要素のシーケンスの長さが最大でも1つだけ異なることを保証します。同じことが、の配列の場合にも当てはまる。b.size > a.size
。
def insert_em(a,b)
b.size <= a.size ? recurse(a,b) : recurse(b,a)
end
def recurse(a,b)
i = a.size/(b.size+1)
b.size == 1 ? a[0,i] + b + a[i..-1] :
[*a[0,i], b.first].concat(recurse(a[i..-1], b[1..-1]))
end
a = [1,2,3,4,5,6,7,8,9]
insert_em a, ['a']
#=> [1, 2, 3, 4, "a", 5, 6, 7, 8, 9]
insert_em a, ['a','b']
#=> [1, 2, 3, "a", 4, 5, 6, "b", 7, 8, 9]
insert_em a, ['a','b','c']
#=> [1, 2, "a", 3, 4, "b", 5, 6, "c", 7, 8, 9]
insert_em a, ['a','b','c','d']
#=> [1, "a", 2, 3, "b", 4, 5, "c", 6, 7, "d", 8, 9]
insert_em a, ['a','b','c','d','e']
#=> [1, "a", 2, "b", 3, "c", 4, 5, "d", 6, 7, "e", 8, 9]
insert_em a, ['a','b','c','d','e','f']
#=> [1, "a", 2, "b", 3, "c", 4, "d", 5, "e", 6, 7, "f", 8, 9]
insert_em a, ['a','b','c','d','e','f','g']
#=> [1, "a", 2, "b", 3, "c", 4, "d", 5, "e", 6, "f", 7, "g", 8, 9]
insert_em a, ['a','b','c','d','e','f','g','i']
#=> [1, "a", 2, "b", 3, "c", 4, "d", 5, "e", 6, "f", 7, "g", 8, "i", 9]
insert_em a, ['a','b','c','d','e','f','g','i','j']
#=> ["a", 1, "b", 2, "c", 3, "d", 4, "e", 5, "f", 6, "g", 7, "i", 8, "j", 9]
insert_em a, ['a','b','c','d','e','f','g','i','j','k']
#=> ["a", 1, "b", 2, "c", 3, "d", 4, "e", 5, "f", 6, "g", 7, "i", 8, "j", 9, "k"]
insert_em a, ['a','b','c','d','e','f','g','i','j','k','l']
#=> ["a", 1, "b", 2, "c", 3, "d", 4, "e", 5, "f", 6, "g", 7, "i", 8, "j", 9, "k", "l"]
具体的には、正確に1:2の長さの配列に対する回答が必要でしたか?または、より一般的な答え、つまり任意の長さの2つの配列が必要でしたか? – sawa
任意の長さにしてください! –
これは私が最初に考えていたものです。それは私の答えだけに適しています。 – sawa