Begin forwarded message:

> From: Alexander Stedile <as_news / gmx.at>
> Date: January 27, 2008 6:41:47 PM CST
> To: submission / rubyquiz.com
> Subject: Please Forward: Ruby Quiz Submission
>
> Making Change (#154)
>
> Hi, I want to give it a try for the first time. I am curious what  
> the other Ruby coders will show.
> I hope my solution is not too straight forward and handles most of  
> the ugly cases. ;-)
>
> Cheers,
> Alexander Stedile
> ___
>
> #!/usr/bin/ruby
>
> # Usage: make_change.rb <amount> [<coins_separated_by_commas>]
>
> def make_change(amount, coins = [25, 10, 5, 1])
>  coins = coins.sort.reverse
>  solution_change = nil
>  solution_remainder = nil
>
>  until coins.empty?
>    remainder = amount
>    change = []
>
>    coins.each { |c|
>      until remainder < c do
>        # Take as many big coins as possible.
>        remainder -= c
>        change << c
>      end
>    }
>
>    if solution_change.nil? || change.size < solution_change.size
>      solution_change = change # Found first or better solution.
>      solution_remainder = remainder
>    end
>
>    coins.shift # Try without highest value coin until empty.
>  end
>  puts "Missing coin: #{solution_remainder}." unless  
> solution_remainder == 0
>  solution_change
> end
>
> if __FILE__ == $0 then
>  if ARGV[1]
>    coins = ARGV[1].split(",").collect{ |coin| coin.to_i }
>    p make_change(ARGV[0].to_i, coins)
>  else
>    p make_change(ARGV[0].to_i)
>  end
> end