```On Jan 25, 5:50 pm, Ruby Quiz <ja... / grayproductions.net> wrote:
>
> This week's Ruby Quiz is to complete a change making function with this
> skeleton:
>
>         def make_change(amount, coins = [25, 10, 5, 1])
>
>         end

Hi,

I've had some connectivity issues, so here is my a bit too late
solution to this:

#!/usr/bin/env ruby

def make_change(amount, coins = [25, 10, 5, 1])
coins = coins.sort.reverse

#  p amount
#  p coins

best_change = Array.new(amount + 1)
0.upto(amount) do |n|
best_change[n] = coins.map do |c|
n - c < 0 \
? [] \
: (best_change[n - c].empty? && n != c \
? [] \
: [c] + best_change[n - c])
end.delete_if{ |a| a.empty? } \
.sort{ |a, b| a.size <=> b.size }[0] || []
end

#  p best_change

best_change[amount]
end

if __FILE__ == \$0

require 'test/unit'

class TestMakeChange < Test::Unit::TestCase
def setup
@_1071_coins = [10, 7, 1]
@ua_coins = [50, 25, 10, 5, 2, 1]
@au_coins = [200, 100, 50, 20, 10, 5]
end

def test_zero
assert_equal([], make_change(0))
end

def test_change_equal_to_one_coin
assert_equal([10], make_change(10, @_1071_coins))
assert_equal([7], make_change(7, @_1071_coins))
end

def test_two_middles
assert_equal([7, 7], make_change(14, @_1071_coins))
end

def test_us
assert_equal([25, 10, 1, 1, 1, 1], make_change(39))
assert_equal([25, 25, 25, 25], make_change(100))
assert_equal([25, 25, 25, 10, 10, 1, 1, 1, 1], make_change(99))
end

def test_ua
assert_equal([2, 2], make_change(4, @ua_coins))
assert_equal([25, 10, 2], make_change(37, @ua_coins))
assert_equal([50, 25, 10, 10, 2, 2], make_change(99, @ua_coins))
end

def test_24_1082
assert_equal([8, 8, 8], make_change(24, [10,8,2]))
end

def test_au
assert_equal([], make_change(1, @au_coins))
assert_equal([20, 10, 5], make_change(35, @au_coins))
end

def test_15_1053
assert_equal([5, 3, 3, 3], make_change(14, [10, 5, 3]))
end

def test_x97
assert_equal([99, 99, 99], make_change(297, [100, 99, 1]))
assert_equal([100, 99, 99, 99], make_change(397, [100, 99, 1]))
assert_equal([100, 100, 99, 99, 99], make_change(497, [100, 99,
1]))
end

def test_4563
assert_equal([97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 89, 7, 5],
make_change(4563, [97, 89, 83, 79, 73, 71, 67, 61,
59, 53, 47, 43, 41, 37, 31, 29,
23, 19, 17, 13, 11, 7, 5, 3]))
end

def test_huge
#      assert_equal([], make_change(1_000_001))
end
end

end

Yep, I know it's ugly, but I hadn't much time to eliminate that
`best_change[0]' corner case...

Great Quiz anyway! :)

--
Cheers,
Alex

```