Skip to content

Commit 3f80959

Browse files
committed
Merge pull request #149 from sjakobi/fix-sum-of-multiples
sum-of-multiples: Move to functional solution, add tests
2 parents 2bc8442 + 43e30cd commit 3f80959

File tree

2 files changed

+32
-20
lines changed

2 files changed

+32
-20
lines changed

sum-of-multiples/example.py

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,9 @@
1-
class SumOfMultiples(object):
2-
3-
def __init__(self, *args):
4-
self.numbers = args if args else [3, 5]
5-
6-
def to(self, limit):
7-
return sum(n
8-
for n in range(limit)
9-
if self.is_multiple(n))
10-
11-
def is_multiple(self, m):
12-
return any(m % n == 0
13-
for n in self.numbers)
1+
def sum_of_multiples(limit, multiples=None):
2+
if multiples is None:
3+
multiples = [3, 5]
4+
elif multiples[0] == 0:
5+
# multiples of 0 don't change the sum
6+
multiples = multiples[1:]
7+
return sum(value for value in range(limit)
8+
if any(value % multiple == 0
9+
for multiple in multiples))

sum-of-multiples/sum_of_multiples_test.py

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,42 @@
1+
"""
2+
You can make the following assumptions about the inputs to the
3+
'sum_of_multiples' function:
4+
* All input numbers are non-negative 'int's, i.e. natural numbers including
5+
zero.
6+
* If a list of factors is given, its elements are uniqe and sorted in
7+
ascending order.
8+
* If the 'factors' argument is missing, use the list [3, 5] instead.
9+
"""
10+
111
import unittest
212

3-
from sum_of_multiples import SumOfMultiples
13+
from sum_of_multiples import sum_of_multiples
414

515

616
class SumOfMultiplesTest(unittest.TestCase):
717
def test_sum_to_1(self):
8-
self.assertEqual(0, SumOfMultiples().to(1))
18+
self.assertEqual(0, sum_of_multiples(1))
919

1020
def test_sum_to_3(self):
11-
self.assertEqual(3, SumOfMultiples().to(4))
21+
self.assertEqual(3, sum_of_multiples(4))
1222

1323
def test_sum_to_10(self):
14-
self.assertEqual(23, SumOfMultiples().to(10))
24+
self.assertEqual(23, sum_of_multiples(10))
1525

1626
def test_sum_to_1000(self):
17-
self.assertEqual(233168, SumOfMultiples().to(1000))
27+
self.assertEqual(233168, sum_of_multiples(1000))
1828

1929
def test_configurable_7_13_17_to_20(self):
20-
self.assertEqual(51, SumOfMultiples(7, 13, 17).to(20))
30+
self.assertEqual(51, sum_of_multiples(20, [7, 13, 17]))
2131

2232
def test_configurable_43_47_to_10000(self):
23-
self.assertEqual(2203160, SumOfMultiples(43, 47).to(10000))
33+
self.assertEqual(2203160, sum_of_multiples(10000, [43, 47]))
34+
35+
def test_configurable_0_to_10(self):
36+
self.assertEqual(0, sum_of_multiples(10, [0]))
37+
38+
def test_configurable_0_1_to_10(self):
39+
self.assertEqual(45, sum_of_multiples(10, [0, 1]))
2440

2541

2642
if __name__ == '__main__':

0 commit comments

Comments
 (0)