$solutions = 0
$numbers = []
$flags = []
def find_solutions(k, target_sum)
if target_sum == 0
# found a solution!
(0..$numbers.length).each { |i| if ($flags[i]) then print $numbers[i], " "; end }
print "\n"
$solutions = $solutions + 1
else
if k < $numbers.length
if target_sum >= $numbers[k]
$flags[k] = true
find_solutions k+1, target_sum-$numbers[k]
$flags[k] = false
end
find_solutions k+1, target_sum
end
end
end
def find_subset_sum(target_sum)
print "\nNow listing all subsets which sum up to ", target_sum, ":\n"
$solutions = 0
(0..$numbers.length()).each { |i| $flags[i] = false }
find_solutions 0, target_sum
print "Found ", $solutions, " different solutions.\n"
end
def subset_sum_test(size)
total = 0
target_sum = 0
(0..size-1).each { |i| $numbers[i] = rand(1000); total += $numbers[i]; print $numbers[i], " " }
target_sum = total/2
find_subset_sum target_sum
end
subset_sum_test 5
JHNvbHV0aW9ucyA9IDAKJG51bWJlcnMgPSBbXQokZmxhZ3MgPSBbXQoKZGVmIGZpbmRfc29sdXRpb25zKGssIHRhcmdldF9zdW0pCiAgaWYgdGFyZ2V0X3N1bSA9PSAwCiAgICAjIGZvdW5kIGEgc29sdXRpb24hCiAgICAoMC4uJG51bWJlcnMubGVuZ3RoKS5lYWNoIHsgfGl8IGlmICgkZmxhZ3NbaV0pIHRoZW4gcHJpbnQgJG51bWJlcnNbaV0sICIgIjsgZW5kIH0KICAgIHByaW50ICJcbiIKICAgICRzb2x1dGlvbnMgPSAkc29sdXRpb25zICsgMQogIGVsc2UKICAgIGlmIGsgPCAkbnVtYmVycy5sZW5ndGgKICAgICAgaWYgdGFyZ2V0X3N1bSA+PSAkbnVtYmVyc1trXQogICAgICAgICRmbGFnc1trXSA9IHRydWUKICAgICAgICBmaW5kX3NvbHV0aW9ucyBrKzEsIHRhcmdldF9zdW0tJG51bWJlcnNba10KICAgICAgICAkZmxhZ3Nba10gPSBmYWxzZQogICAgICBlbmQKICAgICAgZmluZF9zb2x1dGlvbnMgaysxLCB0YXJnZXRfc3VtCiAgICBlbmQKICBlbmQKZW5kCgpkZWYgZmluZF9zdWJzZXRfc3VtKHRhcmdldF9zdW0pCiAgcHJpbnQgIlxuTm93IGxpc3RpbmcgYWxsIHN1YnNldHMgd2hpY2ggc3VtIHVwIHRvICIsIHRhcmdldF9zdW0sICI6XG4iCiAgJHNvbHV0aW9ucyA9IDAKICAoMC4uJG51bWJlcnMubGVuZ3RoKCkpLmVhY2ggeyB8aXwgJGZsYWdzW2ldID0gZmFsc2UgfQogIGZpbmRfc29sdXRpb25zIDAsIHRhcmdldF9zdW0KICBwcmludCAiRm91bmQgIiwgJHNvbHV0aW9ucywgIiBkaWZmZXJlbnQgc29sdXRpb25zLlxuIgplbmQKCmRlZiBzdWJzZXRfc3VtX3Rlc3Qoc2l6ZSkKICB0b3RhbCA9IDAKICB0YXJnZXRfc3VtID0gMAogICgwLi5zaXplLTEpLmVhY2ggeyB8aXwgJG51bWJlcnNbaV0gPSByYW5kKDEwMDApOyB0b3RhbCArPSAkbnVtYmVyc1tpXTsgcHJpbnQgJG51bWJlcnNbaV0sICIgIiB9CiAgdGFyZ2V0X3N1bSA9IHRvdGFsLzIKICBmaW5kX3N1YnNldF9zdW0gdGFyZ2V0X3N1bQplbmQKCnN1YnNldF9zdW1fdGVzdCA1Cg==