Advertisement
Guest User

Untitled

a guest
Sep 25th, 2017
47
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.79 KB | None | 0 0
  1. # A greedy algorithm for bin packing
  2.  
  3. class Array
  4. def rest
  5. self[1..-1]
  6. end
  7. end
  8.  
  9. def optimize_pack inventory, order
  10. loop do
  11. r = pack(inventory, order)
  12.  
  13. return r if r
  14. order += 1
  15. end
  16. end
  17.  
  18. def pack inventory, order
  19. case
  20. when inventory.empty?
  21. nil
  22. when order < inventory[0]
  23. pack(inventory.rest, order)
  24. when order == inventory.first
  25. [inventory.first]
  26. else
  27. x = pack(inventory.rest, order)
  28. y = pack(inventory.rest, order - inventory.first)
  29.  
  30. choices = []
  31. choices << x if x
  32. choices << [inventory.first] + y if y
  33.  
  34. choices.min_by { |a| a.length }
  35. end
  36. end
  37.  
  38.  
  39. puts nil == pack([], 10)
  40. puts [10] == pack([10, 5], 10)
  41. puts [10, 1] == pack([10, 1], 11)
  42. puts [10, 5] == pack([10, 5, 1], 15)
  43. puts pack([10, 5, 1], 14)
  44. puts [10, 5] == optimize_pack([10, 5, 1], 14)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement