diff options
Diffstat (limited to 'challenge-236/roger-bell-west/python/ch-1.py')
| -rwxr-xr-x | challenge-236/roger-bell-west/python/ch-1.py | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/challenge-236/roger-bell-west/python/ch-1.py b/challenge-236/roger-bell-west/python/ch-1.py new file mode 100755 index 0000000000..638c1ca054 --- /dev/null +++ b/challenge-236/roger-bell-west/python/ch-1.py @@ -0,0 +1,49 @@ +#! /usr/bin/python3 + +class Reserve(object): + def __init__(self, _vv): + _vq = _vv + _vq.sort() + _vq.reverse() + _vm = dict() + for i, v in enumerate(_vq): + _vm[v] = i + self.values = _vq + self.counts = [0] * len(_vv) + self.vm = _vm + + def makechange(self, price, tendered): + val = 0 + for bill in tendered: + if bill not in self.vm: + return False + self.counts[self.vm.get(bill)] += 1 + val += bill + val -= price + for bid in range(len(self.values)): + while val >= self.values[bid] and self.counts[bid] > 0: + val -= self.values[bid] + self.counts[bid] -= 1 + return (val == 0) + +def exactchange(a): + reserve = Reserve([5, 10, 20]) + for tendered in a: + if not reserve.makechange(5, [tendered]): + return False + return True + +import unittest + +class TestExactchange(unittest.TestCase): + + def test_ex1(self): + self.assertEqual(exactchange([5, 5, 5, 10, 20]), True, 'example 1') + + def test_ex2(self): + self.assertEqual(exactchange([5, 5, 10, 10, 20]), False, 'example 2') + + def test_ex3(self): + self.assertEqual(exactchange([5, 5, 5, 20]), True, 'example 3') + +unittest.main() |
