fork download
  1. def change(target, sign, coins, n)
  2. (1..coins.size).each do |k|
  3. coins.combination(k).each do |poss|
  4. next unless eval("#{k} #{sign} #{n}")
  5. return poss if poss.reduce(:+) == target
  6. end
  7. end
  8. 'No solution possible'
  9. end
  10.  
  11. if __FILE__ == $0
  12. p change(150, '<', [100, 50, 50, 50, 50], 5)
  13. p change(130, '<', [100, 20, 18, 12, 5, 5], 6)
  14. p change(200, '>=', [50, 50, 20, 20, 10], 5)
  15. p change(150, '<=', [100, 50, 50, 50, 50], 2)
  16. p change(130, '<=', [100, 20, 18, 12, 5, 5], 3)
  17. #pp change(150, '<=', Array.new(10000, 1), 150)
  18. end
Success #stdin #stdout 0.01s 6040KB
stdin
Standard input is empty
stdout
[100, 50]
[100, 18, 12]
"No solution possible"
[100, 50]
[100, 18, 12]