|
|
|
#!/usr/bin/ruby
|
|
|
|
|
|
|
|
class CoffeMachine
|
|
|
|
def initialize(location, change, coffees, price)
|
|
|
|
@location = location
|
|
|
|
@change = change
|
|
|
|
@coffees = coffees
|
|
|
|
@price = price
|
|
|
|
@number_served = 0
|
|
|
|
end
|
|
|
|
|
|
|
|
def prompt_for_payment()
|
|
|
|
if( not self.empty? ) then
|
|
|
|
puts("Welcome to the #{@location} Coffee Machine.")
|
|
|
|
puts("Please pay #{@price} SEK for one coffee.")
|
|
|
|
puts("Total amount served: #{@number_served}")
|
|
|
|
|
|
|
|
print("Insert coins: ")
|
|
|
|
coins = await_payment()
|
|
|
|
else
|
|
|
|
puts("Inget kaffe kvar :(")
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def await_payment()
|
|
|
|
inp = gets().chomp()
|
|
|
|
coin_types = inp.split(",")
|
|
|
|
|
|
|
|
coin_hash = Hash.new(0)
|
|
|
|
|
|
|
|
coin_types.each do |t|
|
|
|
|
x = t.split(":")
|
|
|
|
coin_hash[x[0].to_i] = x[1].to_i
|
|
|
|
end
|
|
|
|
|
|
|
|
@change = @change.merge(coin_hash)
|
|
|
|
sum, d = verify_payment(coin_hash)
|
|
|
|
|
|
|
|
if( d > 0 ) then
|
|
|
|
dispense_change(d)
|
|
|
|
dispense_coffe()
|
|
|
|
elsif( d < 0 ) then
|
|
|
|
puts("Not enough money")
|
|
|
|
else
|
|
|
|
dispense_coffe()
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
private def verify_payment(coin_hash)
|
|
|
|
sum = 0
|
|
|
|
coin_hash.each do |key, value|
|
|
|
|
sum += value*key
|
|
|
|
end
|
|
|
|
|
|
|
|
return sum, sum - @price
|
|
|
|
end
|
|
|
|
|
|
|
|
private def calculate_change(d)
|
|
|
|
@change.each do |type, amount|
|
|
|
|
amount = d.to_f/type
|
|
|
|
|
|
|
|
if( amount.to_i == amount && amount <= @change[type] ) then
|
|
|
|
return type, amount.to_i
|
|
|
|
else
|
|
|
|
next
|
|
|
|
end
|
|
|
|
end
|
|
|
|
return nil, nil
|
|
|
|
end
|
|
|
|
|
|
|
|
private def dispense_change(d)
|
|
|
|
cointype, amount = calculate_change(d)
|
|
|
|
if( cointype ) then
|
|
|
|
puts("Här är din change:")
|
|
|
|
@change[cointype] -= amount
|
|
|
|
puts("-> #{amount}st #{cointype} kr")
|
|
|
|
else
|
|
|
|
puts("Kan ej ge tillbaka någon change, tack för pengarna.")
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
private def dispense_coffe()
|
|
|
|
puts("Här är ditt kaffe")
|
|
|
|
@number_served += 1
|
|
|
|
@coffees -= 1
|
|
|
|
end
|
|
|
|
|
|
|
|
def empty?
|
|
|
|
@coffees <= 0
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
x = CoffeMachine.new("hej", {10=>2, 1=>100}, 5, 10)
|
|
|
|
x.prompt_for_payment
|