Class: BinPacking::ScoreBoard

Inherits:
Object
  • Object
show all
Defined in:
lib/bin_packing/score_board.rb

Instance Method Summary collapse

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

Returns:

  • (Boolean)


15
16
17
# File 'lib/bin_packing/score_board.rb', line 15

def any?
  @entries.any?
end

#best_fitObject



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_boxObject



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