Module: Spread

Defined in:
lib/spread.rb

Class Method Summary collapse

Class Method Details

.spread(*args) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/spread.rb', line 20

def self.spread *args
  return [] if args.empty?
  return args[0] if args.count == 0

  args = args.sort_by{|array|array.count}

  mix = args.shift
  while enum = args.shift
    mix = spread_two mix, enum
  end
  mix
end

.spread_two(a, b) ⇒ Object



2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# File 'lib/spread.rb', line 2

def self.spread_two a, b
  a,b = b,a if a.count < b.count
  avg_d = a.count.to_f / (b.count+1)
  offs = 0

  result = []
  b.each do |b_elem|
    from = offs.floor
    offs += avg_d
    to = offs.floor
    result << a[from...to]
    result << b_elem
  end

  result << a[offs.to_i..-1]
  result.flatten
end