class BinPacking::ScoreBoard
Public Class Methods
new(bins, boxes)
click to toggle source
# File lib/bin_packing/score_board.rb, line 8 def initialize(bins, boxes) @entries = [] bins.each do |bin| add_bin_entries(bin, boxes) end end
Public Instance Methods
add_bin(bin)
click to toggle source
# File lib/bin_packing/score_board.rb, line 42 def add_bin(bin) add_bin_entries(bin, current_boxes) end
any?()
click to toggle source
# File lib/bin_packing/score_board.rb, line 15 def any? @entries.any? end
best_fit()
click to toggle source
# File lib/bin_packing/score_board.rb, line 29 def best_fit best = nil @entries.each do |entry| next unless entry.fit? best = entry if best.nil? || best.score < entry.score end best end
largest_not_fiting_box()
click to toggle source
# File lib/bin_packing/score_board.rb, line 19 def largest_not_fiting_box unfit = nil fitting_boxes = Set.new(@entries.select(&:fit?).map(&:box)) @entries.each do |entry| next if fitting_boxes.include?(entry.box) unfit = entry if unfit.nil? || unfit.box.area < entry.box.area end unfit.try(:box) end
recalculate_bin(bin)
click to toggle source
# File lib/bin_packing/score_board.rb, line 46 def recalculate_bin(bin) @entries.select { |e| e.bin == bin }.each(&:calculate) end
remove_box(box)
click to toggle source
# File lib/bin_packing/score_board.rb, line 38 def remove_box(box) @entries.delete_if { |e| e.box == box } end
Private Instance Methods
add_bin_entries(bin, boxes)
click to toggle source
# File lib/bin_packing/score_board.rb, line 52 def add_bin_entries(bin, boxes) boxes.each do |box| entry = BinPacking::ScoreBoardEntry.new(bin, box) entry.calculate @entries << entry end end
current_boxes()
click to toggle source
# File lib/bin_packing/score_board.rb, line 60 def current_boxes @entries.map(&:box).uniq end