Skip to content

Instantly share code, notes, and snippets.

@hchood
Created November 24, 2013 23:04
Show Gist options
  • Save hchood/7633657 to your computer and use it in GitHub Desktop.
Save hchood/7633657 to your computer and use it in GitHub Desktop.
Ruby Fundamentals IV: Non-core Change Machine Kata
# Ruby Fundamentals IV: Non-core Change Machine Kata
def is_valid_currency?(amount)
amount.to_s.match(/\A\d+[.]{0,1}\d{0,2}\z/)
end
amount_due = rand(0.0..100.0)
puts "Amount Due: #{sprintf("%.2f", amount_due)}\n\nWhat did customer supply?"
amount_tendered = gets.chomp.to_f
# test if amount_tendered is valid
change_due = amount_tendered - amount_due
change_due_integer = (change_due*100).to_i
currency_due = {}
currency_due[:dollars] = change_due_integer / 100
currency_due[:quarters] = change_due_integer % 100 / 25
currency_due[:dimes] = change_due_integer % 100 % 25 / 10
currency_due[:nickels] = change_due_integer % 100 % 25 % 10 / 5
currency_due[:pennies] = change_due_integer % 100 % 25 % 10 % 5
puts "\nThe change due is $#{sprintf("%.2f", change_due)}\nYou should issue:\n\n"
currency_due.each do |key, value|
puts "#{value} #{key}\n" unless value == 0
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment