Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Funnel
- attr_accessor :funnel, :arrangement
- def initialize
- self.arrangement = [1, 2, 3, 4, 5]
- self.funnel = Hash[arrangement.map {|x| [x, []]}]
- print self.funnel
- end
- def add_to_funnel(index, i)
- funnel[index] << i
- if (index == funnel[index].length)
- return index+1
- else
- return index
- end
- end
- def fill *args
- index = -1
- self.arrangement.each do |i|
- array = funnel[i]
- if array.length != i
- index = i
- break
- end
- end
- args.each do |i|
- puts ("index is #{index}")
- index = add_to_funnel(index, i)
- end
- puts funnel
- end
- def get_weight(array, index, weight)
- if index <= array.length-1
- weight += 1
- if funnel.include? (array.length +1)
- a = funnel[array.length + 1]
- weight = get_weight(a, index , weight)
- weight = get_weight(a, index+1, weight)
- else
- return weight
- end
- else
- return weight
- end
- puts weight
- end
- def find_replacement(array_index, num_index)
- if funnel.include?(array_index+1)
- from = funnel[array_index+1]
- a = get_weight(from, num_index, 0)
- b = get_weight(from, num_index+1, 0)
- if a > b or a == b
- return new_array, num_index
- else
- return new_array, num_index +1
- end
- else
- return nil, nil
- end
- end
- def move(array, index)
- i = array.length
- array.delete_at(index)
- new_array, new_index = find_replacement(i, index)
- array[index] = funnel[new_array][new_index]
- if new_array != nil
- move(new_array, new_index)
- end
- end
- def drip
- move(funnel[1], 0)
- return funnel[1][0]
- end
- def to_s
- space = 0
- res = ""
- arrangement.reverse.each do |i|
- array = funnel[i]
- nums_left = i - array.length
- puts "nums left- " + nums_left.to_s
- numbers = array.join(' ')
- numbers += " " * (nums_left) + " " * ( [nums_left-1, 0].max)
- spaces = ' ' * space
- if numbers.length > 0
- numbers = numbers[0..-1]
- end
- res += spaces + "\\#{numbers}/\n"
- space += 1
- end
- return res[0..-2]
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement