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