$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).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 2
JHNvbHV0aW9ucyA9IDAKJG51bWJlcnMgPSBbXQokZmxhZ3MgPSBbXQoKZGVmIGZpbmRfc29sdXRpb25zKGssIHRhcmdldF9zdW0pCiAgaWYgdGFyZ2V0X3N1bSA9PSAwCiAgICAjIGZvdW5kIGEgc29sdXRpb24hCiAgICAoMC4uJG51bWJlcnMubGVuZ3RoKS5lYWNoIHsgfGl8IGlmICgkZmxhZ3NbaV0pIHRoZW4gcHJpbnQgJG51bWJlcnNbaV0sICIgIjsgZW5kIH0KICAgIHByaW50ICJcbiIKICAgICRzb2x1dGlvbnMgPSAkc29sdXRpb25zICsgMQogIGVsc2UKICAgIGlmIGsgPCAkbnVtYmVycy5sZW5ndGgKICAgICAgaWYgdGFyZ2V0X3N1bSA+PSAkbnVtYmVyc1trXQogICAgICAgICRmbGFnc1trXSA9IHRydWUKICAgICAgICBmaW5kX3NvbHV0aW9ucyBrKzEsIHRhcmdldF9zdW0tJG51bWJlcnNba10KICAgICAgICAkZmxhZ3Nba10gPSBmYWxzZQogICAgICBlbmQKICAgICAgZmluZF9zb2x1dGlvbnMgaysxLCB0YXJnZXRfc3VtCiAgICBlbmQKICBlbmQKZW5kCgpkZWYgZmluZF9zdWJzZXRfc3VtKHRhcmdldF9zdW0pCiAgcHJpbnQgIlxuTm93IGxpc3RpbmcgYWxsIHN1YnNldHMgd2hpY2ggc3VtIHVwIHRvICIsIHRhcmdldF9zdW0sICI6XG4iCiAgJHNvbHV0aW9ucyA9IDAKICAoMC4uJG51bWJlcnMubGVuZ3RoKCkpLmVhY2ggeyB8aXwgJGZsYWdzW2ldID0gZmFsc2UgfQogIGZpbmRfc29sdXRpb25zIDAsIHRhcmdldF9zdW0KICBwcmludCAiRm91bmQgIiwgJHNvbHV0aW9ucywgIiBkaWZmZXJlbnQgc29sdXRpb25zLlxuIgplbmQKCmRlZiBzdWJzZXRfc3VtX3Rlc3Qoc2l6ZSkKICB0b3RhbCA9IDAKICB0YXJnZXRfc3VtID0gMAogICgwLi5zaXplKS5lYWNoIHsgfGl8ICRudW1iZXJzW2ldID0gcmFuZCgxMDAwKTsgdG90YWwgKz0gJG51bWJlcnNbaV07IHByaW50ICRudW1iZXJzW2ldLCAiICIgfQogIHRhcmdldF9zdW0gPSB0b3RhbC8yCiAgZmluZF9zdWJzZXRfc3VtIHRhcmdldF9zdW0KZW5kCgpzdWJzZXRfc3VtX3Rlc3QgMgo=