|
|
|
#!/usr/bin/ruby
|
|
|
|
|
|
|
|
class CoffeMachine
|
|
|
|
attr_accessor :location, :change, :coffees, :price, :number_served
|
|
|
|
|
|
|
|
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: ")
|
|
|
|
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)
|
|
|
|
verify_payment(coin_hash)
|
|
|
|
end
|
|
|
|
|
|
|
|
private def verify_payment(coin_hash)
|
|
|
|
sum = 0
|
|
|
|
coin_hash.each do |key, value|
|
|
|
|
sum += value*key
|
|
|
|
end
|
|
|
|
|
|
|
|
delta = sum - @price
|
|
|
|
|
|
|
|
if( delta > 0 ) then
|
|
|
|
dispense_change(delta)
|
|
|
|
dispense_coffe()
|
|
|
|
elsif( delta < 0 ) then
|
|
|
|
puts("Not enough money")
|
|
|
|
else
|
|
|
|
dispense_coffe()
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
private def calculate_change(delta)
|
|
|
|
coin_return = {}
|
|
|
|
@change.each do |type, count|
|
|
|
|
puts("adhfio: #{type} #{count}")
|
|
|
|
amount = delta/type
|
|
|
|
|
|
|
|
coin_return[type] = amount
|
|
|
|
@change[type] -= amount
|
|
|
|
delta %= type
|
|
|
|
next
|
|
|
|
end
|
|
|
|
|
|
|
|
return coin_return
|
|
|
|
end
|
|
|
|
|
|
|
|
private def dispense_change(delta)
|
|
|
|
coin_return = calculate_change(delta)
|
|
|
|
puts("Här är din change:")
|
|
|
|
puts("-> #{coin_return}")
|
|
|
|
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, 15)
|
|
|
|
x.prompt_for_payment
|