Skip to content

Instantly share code, notes, and snippets.

@skatenerd
Last active August 29, 2015 13:56
Show Gist options
  • Save skatenerd/8948481 to your computer and use it in GitHub Desktop.
Save skatenerd/8948481 to your computer and use it in GitHub Desktop.
mush
def gapsize(biggersize, smallersize)
num_gaps = smallersize + 1
total_of_all_gaps = biggersize - smallersize
total_of_all_gaps / num_gaps
end
def gap_sequence(bigger_list, smaller_list)
gapsize = gapsize(bigger_list.size, smaller_list.size)
num_gaps = smaller_list.size + 1
remainder = bigger_list.size - ((gapsize * (num_gaps - 1)) + smaller_list.size)
([gapsize] * (num_gaps - 1)) << remainder
end
def pretty_gap_sequence(bigger_list, smaller_list)
sequence = gap_sequence(bigger_list, smaller_list)
halfway = sequence.size / 2
sequence.insert(halfway, sequence.delete_at(-1))
end
def indices_in_bigger_list(gap_sequence)
gap_sequence[0...-1].reduce([]) do |indices_so_far, current_gap|
last_element = indices_so_far.last || -1
new_place = last_element + current_gap + 1
indices_so_far << new_place
end
end
p indices_in_bigger_list(pretty_gap_sequence([1,2,3,4,5,6,7,8],[1,2]))
def mush(bigger_list, smaller_list)
indices = indices_in_bigger_list(pretty_gap_sequence(bigger_list, smaller_list))
list_of_lists = bigger_list.map do |element| [element] end
indices.zip(smaller_list).reduce(list_of_lists) do |list_of_lists, (index,element)|
list_of_lists[index] << element
list_of_lists
end
end
p mush([1,2,3,4,5,6,7,8],["!!!","!!!"]).flatten
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment