aboutsummaryrefslogtreecommitdiff
path: root/challenge-236/roger-bell-west/python/ch-1.py
diff options
context:
space:
mode:
Diffstat (limited to 'challenge-236/roger-bell-west/python/ch-1.py')
-rwxr-xr-xchallenge-236/roger-bell-west/python/ch-1.py49
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()