Class: Vvm::Dispenser

Inherits:
Object
  • Object
show all
Defined in:
lib/vvm/dispenser.rb

Instance Method Summary collapse

Constructor Details

#initialize(amount, coins) ⇒ Dispenser

Returns a new instance of Dispenser.



5
6
7
8
9
10
11
# File 'lib/vvm/dispenser.rb', line 5

def initialize(amount, coins)
  @amount = amount
  @coins = coins
  @min_coins = []
  @min_qty = 0
  @subset = coins
end

Instance Method Details

#callObject

rubocop:disable Metrics/AbcSize



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/vvm/dispenser.rb', line 13

def call # rubocop:disable Metrics/AbcSize
  return give_away if not_enough_change?

  coins.each_with_object([]).with_index do |(_, memo), index|
    self.subset = define_subset(index)

    result = calculate(subset, amount)

    memo << result if result.sum { _1.value * _1.qty } == amount

    match_qty = calculate_min_qty(memo)

    calibrate(memo, match_qty) if min_coins.empty? || match_qty < min_qty
  end

  min_coins
end