Skip to content

Instantly share code, notes, and snippets.

@wlodi83
Created December 10, 2012 20:35
Show Gist options
  • Select an option

  • Save wlodi83/4253184 to your computer and use it in GitHub Desktop.

Select an option

Save wlodi83/4253184 to your computer and use it in GitHub Desktop.
make_change - dynamic programming
require 'benchmark'
def make_change(change, *coins)
coins.empty? ? coins = [200, 100, 50, 20, 10, 5, 2, 1] : coins = coins.flatten
denom = []
c = Array.new(change) {|index| index = Float::INFINITY}.unshift(0)
(1..change).each do |j|
coins.each do |coin|
if j >= coin && 1+c[j-coin] < c[j]
c[j] = 1+c[j-coin]
denom[j] = coin
end
end
end
recursive_print = lambda { |denom, n|
if n > 0
print "[" + denom[n].to_s + "]"
recursive_print.call(denom, n - denom[n])
end
}
recursive_print.call(denom, change)
end
Benchmark.bmbm do |b|
b.report("1984") {make_change(1984)}
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment