Advertisement
Guest User

Untitled

a guest
Jun 14th, 2019
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 2.23 KB | None | 0 0
  1. class Funnel
  2.   attr_accessor :funnel, :arrangement
  3.  
  4.   def initialize
  5.     self.arrangement = [1, 2, 3, 4, 5]
  6.     self.funnel  = Hash[arrangement.map {|x| [x, []]}]
  7.  
  8.     print self.funnel
  9.   end
  10.  
  11.   def add_to_funnel(index, i)
  12.     funnel[index] << i
  13.     if (index == funnel[index].length)
  14.       return index+1
  15.     else
  16.       return index
  17.     end
  18.   end
  19.  
  20.   def fill *args
  21.     index = -1
  22.     self.arrangement.each do |i|
  23.         array = funnel[i]
  24.         if array.length != i
  25.           index = i
  26.           break
  27.         end
  28.     end
  29.     args.each do |i|
  30.       puts ("index is #{index}")
  31.       index = add_to_funnel(index, i)    
  32.     end
  33.     puts funnel
  34.   end
  35.  
  36.   def get_weight(array, index, weight)
  37.     if index <= array.length-1
  38.       weight += 1
  39.       if funnel.include? (array.length +1)
  40.         a = funnel[array.length + 1]
  41.         weight = get_weight(a, index , weight)
  42.         weight = get_weight(a, index+1, weight)
  43.       else
  44.         return weight
  45.       end
  46.     else
  47.       return weight
  48.     end
  49.     puts weight
  50.   end
  51.  
  52.   def find_replacement(array_index, num_index)
  53.     if funnel.include?(array_index+1)
  54.       from = funnel[array_index+1]
  55.       a = get_weight(from, num_index, 0)
  56.       b = get_weight(from, num_index+1, 0)
  57.       if a > b or a == b
  58.         return new_array, num_index
  59.       else
  60.         return new_array, num_index +1
  61.       end
  62.     else
  63.       return nil, nil
  64.     end
  65.   end
  66.  
  67.   def move(array, index)
  68.     i = array.length
  69.     array.delete_at(index)
  70.     new_array, new_index = find_replacement(i, index)
  71.     array[index] = funnel[new_array][new_index]
  72.     if new_array != nil
  73.       move(new_array, new_index)
  74.     end
  75.   end
  76.  
  77.   def drip
  78.     move(funnel[1], 0)
  79.     return funnel[1][0]
  80.   end
  81.  
  82.   def to_s
  83.     space = 0
  84.     res = ""
  85.     arrangement.reverse.each do |i|
  86.       array = funnel[i]
  87.       nums_left = i - array.length
  88.       puts "nums left- " + nums_left.to_s
  89.       numbers = array.join(' ')
  90.       numbers += " " * (nums_left) + " " * ( [nums_left-1, 0].max)
  91.       spaces = ' ' * space
  92.       if numbers.length > 0
  93.         numbers = numbers[0..-1]
  94.       end
  95.       res += spaces + "\\#{numbers}/\n"
  96.       space += 1
  97.     end
  98.     return res[0..-2]
  99.   end
  100. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement