Skip to content

Commit eadfdec

Browse files
author
Mauricio Klein
committed
Add solution for challenge #34
1 parent 5ec2ed0 commit eadfdec

File tree

6 files changed

+48
-0
lines changed

6 files changed

+48
-0
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -33,3 +33,4 @@
3333
- [x] [Challenge 31: Find cycle in indirected graph](challenge-31/)
3434
- [x] [Challenge 32: Shortest path in a indirected acyclic graph](challenge-32/)
3535
- [x] [Challenge 33: Merge Overlapping Intervals](challenge-33/)
36+
- [x] [Challenge 34: Subset sum problem](challenge-34/)

challenge-34/Makefile

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
test:
2+
python test_*.py
3+
4+
.PHONY: test

challenge-34/README.md

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# Subset sum problem
2+
3+
## Description
4+
5+
Given a set of non-negative integers, and a value sum, determine if there is a subset of the given set with sum equal to given sum.
6+
7+
## Example
8+
9+
```
10+
Input:
11+
set = (3, 34, 4, 12, 5, 2), sum = 9
12+
13+
Output:
14+
True # subset (4, 5) are equal to 9
15+
```

challenge-34/__init__.py

Whitespace-only changes.

challenge-34/solver.py

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
def subset_sum(nums, target):
2+
return helper(0, nums, target)
3+
4+
def helper(acc, remaining_nums, target):
5+
if acc == target:
6+
return True
7+
elif acc > target:
8+
return False
9+
elif not remaining_nums:
10+
return False
11+
12+
num = remaining_nums[0]
13+
14+
# Return the backtracking with and without the next number
15+
return helper(acc+num, remaining_nums[1:], target) or helper(acc, remaining_nums[1:], target)

challenge-34/test_solver.py

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import unittest
2+
from solver import subset_sum
3+
4+
class TestSolver(unittest.TestCase):
5+
def test_queen(self):
6+
self.assertTrue (subset_sum((3, 34, 4, 12, 5, 2), 8)) # True: (3,5)
7+
self.assertFalse(subset_sum((3, 34, 4, 12, 5, 2), 1)) # False
8+
self.assertTrue (subset_sum((1, 1, 1, 1, 1 ), 5)) # True: (1,1,1,1,1)
9+
self.assertFalse(subset_sum((1, 1, 1, 1, 1 ), 6)) # False
10+
self.assertTrue (subset_sum(( ), 0)) # True: ()
11+
12+
if __name__ == "__main__":
13+
unittest.main()

0 commit comments

Comments
 (0)