class BinPacking::Packer
Public Class Methods
new(bins)
click to toggle source
# File lib/bin_packing/packer.rb, line 3 def initialize(bins) @bins = bins @unpacked_boxes = [] end
Public Instance Methods
pack(boxes, options = {})
click to toggle source
# File lib/bin_packing/packer.rb, line 8 def pack(boxes, options = {}) packed_boxes = [] boxes = boxes.reject(&:packed?) return packed_boxes if boxes.none? limit = options[:limit] || BinPacking::Score::MAX_INT board = BinPacking::ScoreBoard.new(@bins, boxes) while entry = board.best_fit entry.bin.insert!(entry.box) board.remove_box(entry.box) board.recalculate_bin(entry.bin) packed_boxes << entry.box break if packed_boxes.size >= limit end packed_boxes end
pack!(boxes)
click to toggle source
# File lib/bin_packing/packer.rb, line 26 def pack!(boxes) packed_boxes = pack(boxes) if packed_boxes.size != boxes.size raise ArgumentError, "#{boxes.size - packed_boxes.size} boxes not "\ "packed into #{@bins.size} bins!" end end