Class: BinPacking::ScoreBoard
- Inherits:
-
Object
- Object
- BinPacking::ScoreBoard
- Defined in:
- lib/bin_packing/score_board.rb
Instance Method Summary collapse
- #add_bin(bin) ⇒ Object
- #any? ⇒ Boolean
- #best_fit ⇒ Object
-
#initialize(bins, boxes) ⇒ ScoreBoard
constructor
A new instance of ScoreBoard.
- #largest_not_fiting_box ⇒ Object
- #recalculate_bin(bin) ⇒ Object
- #remove_box(box) ⇒ Object
Constructor Details
#initialize(bins, boxes) ⇒ ScoreBoard
Returns a new instance of ScoreBoard.
8 9 10 11 12 13 |
# 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 |
Instance Method Details
#add_bin(bin) ⇒ Object
42 43 44 |
# File 'lib/bin_packing/score_board.rb', line 42 def add_bin(bin) add_bin_entries(bin, current_boxes) end |
#any? ⇒ Boolean
15 16 17 |
# File 'lib/bin_packing/score_board.rb', line 15 def any? @entries.any? end |
#best_fit ⇒ Object
29 30 31 32 33 34 35 36 |
# 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 ⇒ Object
19 20 21 22 23 24 25 26 27 |
# 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) ⇒ Object
46 47 48 |
# 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) ⇒ Object
38 39 40 |
# File 'lib/bin_packing/score_board.rb', line 38 def remove_box(box) @entries.delete_if { |e| e.box == box } end |