Concatenate and Alternate

tags: alternate concatenate zip

Write a function that concatenates two lists. [a,b,c], [1,2,3] → [a,b,c,1,2,3]

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
def concatenate(a, b)
  for i in (0..b.size-1)
    a << b[i]
  end
  
  a
end

a = ['a','b','c']
b = [1,2,3]

p concatenate(a, b)

If the input data structure cannot be modified:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
def concatenate(a, b)
  result = []
  
  for i in (0..a.size-1)
    result << a[i]
  end

  for i in (0..b.size-1)
    result << b[i]
  end
    
  result
end

a = ['a','b','c']
b = [1,2,3]

p concatenate(a, b)

Write a function that combines two lists by alternatingly taking elements, e.g. [a,b,c], [1,2,3] → [a,1,b,2,c,3].

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
def alternate(a, b)
  result = []
  
  for i in (0..a.size - 1)
    result << a[i]
    result << b[i]
  end
  
  result
end

a = ['a', 'b', 'c']
b = [1, 2, 3]

p alternate(a, b)

This can be extended for three arrays:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
def zip(a, b, c)
  result = []
  
  for i in (0..a.size-1)
    result << "#{a[i]}#{b[i]}#{c[i]}"
  end
  
  result
end

a = ['a', 'b', 'c']
b = ['A', 'B', 'C']
c = [1, 2, 3]

p zip(a, b, c)

This method outputs the same output as the Ruby builtin zip method.

1
['a','b','c'].zip(['A','B','C'], [1,2,3]) {|i,j,k| puts "#{i}#{j}#{k}"}