On Jan 25, 2008, at 9:50 AM, Ruby Quiz wrote:

> This week's Ruby Quiz is to complete a change making function
Here's my own solution to this week's quiz:

#!/usr/bin/env ruby -wKU

def make_change(amount, coins = [25, 10, 5, 1])
   return [ ] if amount.zero?

   coins = coins.sort_by { |coin| -coin }

   prev_totals = {0 => [ ]}
   loop do
     cur_totals = { }

     prev_totals.each do |prev_total, prev_coins|
       coins.each do |coin|
         cur_total, cur_coins = prev_total + coin, prev_coins + [coin]

         return cur_coins.sort_by { |coin| -coin } if cur_total ==  mount
         cur_totals[cur_total] ||= cur_coins       if cur_total < amount
       end
     end

     return if cur_totals.empty?

     prev_totals = cur_totals
   end
end

if __FILE__ == $PROGRAM_NAME
   amount, *coins = ARGV.map { |n| Integer(n) }
   abort "Usage:  #{$PROGRAM_NAME} AMOUNT [COIN[ COIN]...]" unless  
amount

   p coins.empty? ? make_change(amount) : make_change(amount, coins)
end

__END__

Has anyone done time comparisons of the submissions?  I'm just curious  t what the fastest strategies have been.

James Edward Gray II